library(tidyverse)
Registered S3 methods overwritten by 'dbplyr':
method from
print.tbl_lazy
print.tbl_sql
-- Attaching packages --------------------------------------- tidyverse 1.3.0 --
v ggplot2 3.3.2 v purrr 0.3.4
v tibble 3.0.3 v dplyr 1.0.2
v tidyr 1.1.1 v stringr 1.4.0
v readr 1.3.1 v forcats 0.5.0
-- Conflicts ------------------------------------------ tidyverse_conflicts() --
x dplyr::filter() masks stats::filter()
x dplyr::lag() masks stats::lag()
library(dplyr)
library(na.tools)
na.tools-0.3.1 (2018-06-25) - Copyright 愼㸹 2018 Decision Patterns
library(ggimage)
pbp <- read_csv(url("https://github.com/ryurko/nflscrapR-data/raw/master/play_by_play_data/regular_season/reg_pbp_2019.csv"))
Parsed with column specification:
cols(
.default = col_double(),
home_team = col_character(),
away_team = col_character(),
posteam = col_character(),
posteam_type = col_character(),
defteam = col_character(),
side_of_field = col_character(),
game_date = col_date(format = ""),
game_half = col_character(),
time = col_time(format = ""),
yrdln = col_character(),
desc = col_character(),
play_type = col_character(),
pass_length = col_character(),
pass_location = col_character(),
run_location = col_character(),
run_gap = col_character(),
field_goal_result = col_character(),
extra_point_result = col_character(),
two_point_conv_result = col_character(),
timeout_team = col_character()
# ... with 88 more columns
)
See spec(...) for full column specifications.
84 parsing failures.
row col expected actual file
6678 fumbled_2_player_id 1/0/T/F/TRUE/FALSE 00-0033873 <connection>
6678 fumbled_2_player_name 1/0/T/F/TRUE/FALSE P.Mahomes <connection>
6678 fumbled_2_team 1/0/T/F/TRUE/FALSE KC <connection>
6678 fumble_recovery_2_team 1/0/T/F/TRUE/FALSE KC <connection>
6678 fumble_recovery_2_player_id 1/0/T/F/TRUE/FALSE 00-0034301 <connection>
.... ........................... .................. .......... ............
See problems(...) for more details.
pbp
##############################################
#Pro Football Reference
JogadoresAvaliados = c(1, 3, 14, 8, 17, 7, 18, 9, 4, 12, 32, 19, 26, 44, 6, 5, 15, 24, 25, 22, 16, 10, 34, 27, 23, 37, 39, 11, 40, 20, 68, 33, 52, 29, 46, 43, 48, 75, 28, 58, 30, 13, 41, 36, 47)
PFR <- read.csv("PFR.csv", sep=";") %>%
filter(Rk %in% JogadoresAvaliados)
PFR[PFR$Tm == "GNB",]$Tm <- "GB"
PFR[PFR$Tm == "NWE",]$Tm <- "NE"
PFR[PFR$Tm == "2TM",]$Tm <- "ARI"
PFR[PFR$Tm == "SFO",]$Tm <- "SF"
PFR[PFR$Tm == "NOR",]$Tm <- "NO"
PFR[PFR$Tm == "TAM",]$Tm <- "TB"
PFR[PFR$Tm == "KAN",]$Tm <- "KC"
PFR$BrkTkl <- PFR$BrkTkl / PFR$Att
PFR
##############################################
#Next Gen Stats
JogadoresAvaliados2 = c("Miles Sanders", "Chris Carson", "Ezekiel Elliott", "Christian McCaffrey", "Mark Ingram", "Aaron Jones", "Kenyan Drake", "Derrick Henry", "Raheem Mostert", "Dalvin Cook", "Nick Chubb", "Gus Edwards", "Josh Jacobs", "Latavius Murray", "Jordan Howard", "Marlon Mack", "Phillip Lindsay", "Joe Mixon", "Saquon Barkley", "Alvin Kamara", "Devin Singletary", "Todd Gurley", "Carlos Hyde", "Ronald Jones", "Adrian Peterson", "Matt Breida", "Jamaal Williams", "Alexander Mattison", "Sony Michel", "LeSean McCoy", "Damien Williams", "Melvin Gordon", "DeAndre Washington", "Leonard Fournette", "Austin Ekeler", "Royce Freeman", "James Conner", "Benny Snell", "Devonta Freeman", "Kerryon Johnson", "Tevin Coleman", "David Montgomery", "Frank Gore", "Le'Veon Bell", "Peyton Barber")
NextGenStats <- read.csv("NGS.csv", sep=";") %>%
filter(PLAYER.NAME %in% JogadoresAvaliados2)
NextGenStats[NextGenStats$TEAM == "LV",]$TEAM <- "OAK"
NextGenStats
##############################################
#Football Outsiders
FootballOutsiders <- read.csv("FO.csv", sep=";") %>% na.exclude
FootballOutsiders[5,2] <- "ARI"
FootballOutsiders
#Dividir a base do nflscrapR entre Corridas e Passes
corridas <- pbp %>% filter(rush_attempt==1, play_type=="run") %>% select(desc, rush_attempt, yards_gained, rusher_player_name, rush_touchdown, epa, posteam, td_prob, rusher_player_id) %>%
filter((rusher_player_name %in% FootbalOutsiders$Player),
!((rusher_player_name %in% c("K.Drake")) & (posteam == "MIA")),
!((rusher_player_name %in% c("K.Johnson")) & (posteam == "ARI")),
!((rusher_player_name %in% c("J.Williams")) & (posteam == "IND")),
!((rusher_player_name %in% c("D.Washington")) & (posteam == "NO")))
passes <- pbp %>% filter(pass_attempt==1, play_type=="pass") %>% select(desc, pass_attempt, yards_gained, receiver_player_name, epa, yac_epa, posteam, receiver_player_id) %>%
filter((receiver_player_name %in% FootbalOutsiders$Player),
!((receiver_player_name %in% c("K.Drake")) & (posteam == "MIA")),
!((receiver_player_name %in% c("K.Johnson")) & (posteam == "ARI")),
!((receiver_player_name %in% c("J.Williams")) & (posteam == "IND")),
!((receiver_player_name %in% c("D.Washington")) & (posteam == "NO")))
#Criar ranking de jogadores nas estatÃsticas retiradas do nflscrapR
#Epa Terrestre por tentativa
rank_EPA_T_attempt <- corridas %>%
group_by(rusher_player_id) %>%
mutate(EpaTerrestre_pa = mean(epa, na.rm = TRUE), Time = posteam, Corridas=n()) %>%
select (Time, rusher_player_name, EpaTerrestre_pa, Corridas) %>% distinct %>%
arrange(desc(EpaTerrestre_pa), na.rm = TRUE)
Adding missing grouping variables: `rusher_player_id`
rank_EPA_T_attempt
###############################
#Epa Terrestre "Longo" por tentativa
corridasMaisDe8 <- corridas %>% filter(yards_gained >= 9)
rank_EPA_T_longo_attempt <- corridasMaisDe8 %>%
group_by(rusher_player_id) %>%
mutate(EpaTerrestreLongo_pa = mean(epa, na.rm = TRUE), TotalEpa = sum(epa, na.rm = TRUE), Time = posteam, TDs = sum(rush_touchdown), "Jardas Por Carregada"=mean(yards_gained), Corridas=n()) %>%
select (Time, rusher_player_name, EpaTerrestreLongo_pa, TotalEpa, Corridas, TDs) %>% distinct %>%
arrange(desc(EpaTerrestreLongo_pa), na.rm = TRUE)
Adding missing grouping variables: `rusher_player_id`
rank_EPA_T_longo_attempt
##############################
#Open Field Ratio
corridas <- corridas %>%
mutate(
CL = if_else(yards_gained >= 9, 1 , 0), #clutch line
BPS = if_else(yards_gained >= 20 | (yards_gained >= 9 & rush_touchdown == 1), 1, 0) #sucesso na big play
)
rank_OFR <- corridas %>%
filter(yards_gained >= 9) %>%
group_by(rusher_player_id) %>%
mutate(Time = posteam, Corridas=n(), OpenFieldRatio = sum(BPS) / sum(CL), TotalBPS = sum(BPS), TotalCL = sum(CL)) %>%
select (Time, rusher_player_name, OpenFieldRatio, TotalBPS, TotalCL, Corridas) %>% distinct %>%
arrange(desc(OpenFieldRatio), na.rm = TRUE)
Adding missing grouping variables: `rusher_player_id`
rank_OFR
#############################
#EPA Aereo (recepções)
rank_epa_aereo <- passes %>%
group_by(receiver_player_id) %>%
mutate(Time = posteam, snaps_passes=n(), epaAereoMedio = mean(epa, na.rm = TRUE), yac_epaAereoMedio = mean(yac_epa, na.rm = TRUE)) %>%
select(receiver_player_name, Time, epaAereoMedio, yac_epaAereoMedio, snaps_passes) %>% distinct %>%
arrange(desc(epaAereoMedio), na.rm = TRUE)
Adding missing grouping variables: `receiver_player_id`
rank_epa_aereo
############################
#Epa Yards After Catch
rank_yac_epa_aereo <- rank_epa_aereo %>%
arrange(desc(yac_epaAereoMedio))
rank_yac_epa_aereo
#Criar ranking de jogadores nas estatÃsticas retiradas do Pro Football Reference
#"Yards Before Contact" por tentativa
rank_YardsBeforeContact <- PFR %>%
arrange(desc(YBC.Att)) %>%
select(Player, Tm, Pos, YBC.Att, YAC.Att, BrkTkl)
rank_YardsBeforeContact
###########################
#"Yards After Contact" por tentativa
rank_YardsAfterContact <- PFR %>%
arrange(desc(YAC.Att)) %>%
select(Player, Tm, Pos, YBC.Att, YAC.Att, BrkTkl, Att) %>% na.exclude
rank_YardsAfterContact
##########################
#Broken Tackles
rank_BrokenTackles <- PFR %>%
arrange(desc(BrkTkl)) %>%
select(Player, Tm, Pos, YBC.Att, YAC.Att, BrkTkl)
rank_BrokenTackles
##########################
#Criar ranking de jogadores nas estatÃsticas retiradas do Next Gen Stats
rank_8manbox <- NextGenStats %>%
arrange(desc(X8.D.)) %>%
select(PLAYER.NAME, TEAM, X8.D., TLOS, ATT) %>% na.exclude
rank_8manbox
##########################
rank_TimeBehindLOS <- NextGenStats %>%
arrange(desc(TLOS)) %>%
select(PLAYER.NAME, TEAM, X8.D., TLOS, ATT)
rank_TimeBehindLOS
#Criar ranking de jogadores nas estatÃsticas retiradas do Football Outsiders
rank_DVOA <- FootballOutsiders %>%
arrange(Rk.2) %>%
select(Player, Team, DVOA, DYAR.. , Succ..Rate)
rank_DVOA
############################
rank_DYAR <- FootballOutsiders %>%
arrange(Rk) %>%
select(Player, Team, DVOA, DYAR.. , Succ..Rate)
rank_DYAR
############################
rank_SuccessRate <- FootballOutsiders %>%
arrange(Succ..Rate) %>%
select(Player, Team, DVOA, DYAR.. , Succ..Rate)
rank_SuccessRate
rank_times <- pbp %>%
group_by(posteam) %>%
mutate(
EpaMedio = mean(epa, na.rm = TRUE),
FirstDowns = sum(if_else(down == 1, 1, 0), na.rm = TRUE),
SecondDowns = sum(if_else(down == 2, 1, 0), na.rm = TRUE),
ThirdDowns = sum(if_else(down == 3, 1, 0), na.rm = TRUE),
FourthDowns = sum(if_else(down == 4, 1, 0), na.rm = TRUE),
First_downs_converted = sum(if_else((down == 1 & yards_gained >= ydstogo) | (down == 1 & penalty_team == defteam), 1, 0), na.rm = TRUE),
Second_downs_converted = sum(if_else((down == 2 & yards_gained >= ydstogo) | (down == 2 & penalty_team == defteam), 1, 0), na.rm = TRUE),
Third_downs_converted = sum(if_else((down == 3 & yards_gained >= ydstogo) | (down == 3 & penalty_team == defteam), 1, 0), na.rm = TRUE),
Fourth_downs_converted = sum(if_else((down == 4 & yards_gained >= ydstogo) | (down == 4 & penalty_team == defteam), 1, 0), na.rm = TRUE),
First_down_conv_pct = First_downs_converted / FirstDowns,
Second_down_conv_pct = Second_downs_converted / SecondDowns,
Third_down_conv_pct = Third_downs_converted / ThirdDowns,
Fourth_down_conv_pct = Fourth_downs_converted / FourthDowns
) %>%
select(posteam, EpaMedio, First_down_conv_pct, Second_down_conv_pct, Third_down_conv_pct, Fourth_down_conv_pct) %>% distinct %>%
arrange(desc(EpaMedio), na.rm = TRUE) %>% na.exclude %>%
filter(posteam != "MIA")
#####
rank_times_epaMedio <- rank_times %>% arrange(desc(EpaMedio))
rank_times_epaMedio$rank <- NA
rank_times_epaMedio$rank <- 1:nrow(rank_times_epaMedio)
rank_times_epaMedio
rank_times_FstPct <- rank_times %>% arrange(desc(First_down_conv_pct))
rank_times_FstPct$rank <- NA
rank_times_FstPct$rank <- 1:nrow(rank_times_FstPct)
rank_times_FstPct
rank_times_SndPct <- rank_times %>% arrange(desc(Second_down_conv_pct))
rank_times_SndPct$rank <- NA
rank_times_SndPct$rank <- 1:nrow(rank_times_SndPct)
rank_times_SndPct
rank_times_TrdPct <- rank_times %>% arrange(desc(Third_down_conv_pct))
rank_times_TrdPct$rank <- NA
rank_times_TrdPct$rank <- 1:nrow(rank_times_TrdPct)
rank_times_TrdPct
rank_times_FthPct <- rank_times %>% arrange(desc(Fourth_down_conv_pct))
rank_times_FthPct$rank <- NA
rank_times_FthPct$rank <- 1:nrow(rank_times_FthPct)
rank_times_FthPct
#rank_times_FthPct$rank[order(-rank_times_FthPct$Fourth_down_conv_pct)] <- 1:nrow(rank_times_FthPct)
#Organizar por times
#EPA Terrestre
rank_teams_EPA_T_attempt <- rank_EPA_T_attempt %>%
mutate(
EpaVezesNumCorridas = EpaTerrestre_pa * Corridas
) %>%
group_by(Time) %>%
mutate(
CorridasTime = sum(Corridas),
Epa_Media_Ponderada = sum(EpaVezesNumCorridas) / CorridasTime
) %>%
select(Time, Epa_Media_Ponderada) %>% distinct %>%
arrange(desc(Epa_Media_Ponderada))
rank_teams_EPA_T_attempt$rank <- NA
rank_teams_EPA_T_attempt$rank <- 1:nrow(rank_teams_EPA_T_attempt)
rank_teams_EPA_T_attempt
#EPA Terrestre Longo
rank_teams_EPA_T_longo_attempt <- rank_EPA_T_longo_attempt %>%
mutate(
EpaVezesNumCorridas = TotalEpa * Corridas
) %>%
group_by(Time) %>%
mutate(
CorridasTime = sum(Corridas),
Epa_Media_Ponderada = sum(EpaVezesNumCorridas) / CorridasTime
) %>%
select(Time, Epa_Media_Ponderada) %>% distinct %>%
arrange(desc(Epa_Media_Ponderada))
rank_teams_EPA_T_longo_attempt$rank <- NA
rank_teams_EPA_T_longo_attempt$rank <- 1:nrow(rank_teams_EPA_T_longo_attempt)
rank_teams_EPA_T_longo_attempt
#OFR
rank_teams_OFR <- rank_OFR %>%
mutate(
OFRVezesNumCorridas = OpenFieldRatio * Corridas
) %>%
group_by(Time) %>%
mutate(
CorridasTime = sum(Corridas),
OFR_Media_Ponderada = sum(OFRVezesNumCorridas) / CorridasTime
) %>%
select(Time, OFR_Media_Ponderada) %>% distinct %>%
arrange(desc(OFR_Media_Ponderada))
rank_teams_OFR$rank <- NA
rank_teams_OFR$rank <- 1:nrow(rank_teams_OFR)
rank_teams_OFR
#EPA Aéreo
rank_teams_epa_aereo <- rank_epa_aereo %>%
mutate(
EPAaereoVezesNumRec = epaAereoMedio * snaps_passes
) %>%
group_by(Time) %>%
mutate(
RecTime = sum(snaps_passes),
EPAAereo_Media_Ponderada = sum(EPAaereoVezesNumRec) / RecTime
) %>%
select(Time, EPAAereo_Media_Ponderada) %>% distinct %>%
arrange(desc(EPAAereo_Media_Ponderada))
rank_teams_epa_aereo$rank <- NA
rank_teams_epa_aereo$rank <- 1:nrow(rank_teams_epa_aereo)
rank_teams_epa_aereo
#EPA Yards After Catch
rank_teams_epayac <- rank_epa_aereo %>%
mutate(
EPAYACVezesNumRec = yac_epaAereoMedio * snaps_passes
) %>%
group_by(Time) %>%
mutate(
RecTime = sum(snaps_passes),
EPAYAC_Media_Ponderada = sum(yac_epaAereoMedio) / RecTime
) %>%
select(Time, EPAYAC_Media_Ponderada) %>% distinct %>%
arrange(desc(EPAYAC_Media_Ponderada))
rank_teams_epayac$rank <- NA
rank_teams_epayac$rank <- 1:nrow(rank_teams_epayac)
rank_teams_epayac
#Yards Before Contact/Attempt
rank_teams_YardsBeforeContact <- rank_YardsAfterContact %>%
mutate(
YardsBeforeContactVezesAttempt = YBC.Att * Att
) %>%
group_by(Tm) %>%
mutate(
CorridasTime = sum(Att),
YBC_Media_Ponderada = sum(YardsBeforeContactVezesAttempt) / CorridasTime
) %>%
select(Tm, YBC_Media_Ponderada) %>% distinct %>%
arrange(desc(YBC_Media_Ponderada))
rank_teams_YardsBeforeContact$rank <- NA
rank_teams_YardsBeforeContact$rank <- 1:nrow(rank_teams_YardsBeforeContact)
rank_teams_YardsBeforeContact
#Yards After Contact/Attempt
rank_teams_YardsAfterContact <- rank_YardsAfterContact %>%
mutate(
YardsAfterContactVezesAttempt = YAC.Att * Att
) %>%
group_by(Tm) %>%
mutate(
CorridasTime = sum(Att),
YAC_Media_Ponderada = sum(YardsAfterContactVezesAttempt) / CorridasTime
) %>%
select(Tm, YAC_Media_Ponderada) %>% distinct %>%
arrange(desc(YAC_Media_Ponderada))
rank_teams_YardsAfterContact$rank <- NA
rank_teams_YardsAfterContact$rank <- 1:nrow(rank_teams_YardsAfterContact)
rank_teams_YardsAfterContact
#Broken Tackles
rank_teams_BrokenTackles <- rank_YardsAfterContact %>%
mutate(
BrokenTacklesVezesAttempt = BrkTkl * Att
) %>%
group_by(Tm) %>%
mutate(
CorridasTime = sum(Att),
BrkTkl_Media_Ponderada = sum(BrokenTacklesVezesAttempt) / CorridasTime
) %>%
select(Tm, BrkTkl_Media_Ponderada) %>% distinct %>%
arrange(desc(BrkTkl_Media_Ponderada))
rank_teams_BrokenTackles$rank <- NA
rank_teams_BrokenTackles$rank <- 1:nrow(rank_teams_BrokenTackles)
rank_teams_BrokenTackles
#8manBox
rank_teams_8manbox <- rank_8manbox %>%
mutate(
EightManInBoxVezesAttempt = X8.D. * ATT
) %>%
group_by(TEAM) %>%
mutate(
CorridasTime = sum(ATT),
EightManInBox_Media_Ponderada = sum(EightManInBoxVezesAttempt) / CorridasTime
) %>%
select(TEAM, EightManInBox_Media_Ponderada) %>% distinct %>%
arrange(desc(EightManInBox_Media_Ponderada))
rank_teams_8manbox$rank <- NA
rank_teams_8manbox$rank <- 1:nrow(rank_teams_8manbox)
rank_teams_8manbox
#TimeBehindLOS
rank_teams_TBLOS <- rank_8manbox %>%
mutate(
TimeBehindLOSVezesAttempt = TLOS * ATT
) %>%
group_by(TEAM) %>%
mutate(
CorridasTime = sum(ATT),
TimeBehindLOS_Media_Ponderada = sum(TimeBehindLOSVezesAttempt) / CorridasTime
) %>%
select(TEAM, TimeBehindLOS_Media_Ponderada) %>% distinct %>%
arrange(desc(TimeBehindLOS_Media_Ponderada))
rank_teams_TBLOS$rank <- NA
rank_teams_TBLOS$rank <- 1:nrow(rank_teams_TBLOS)
rank_teams_TBLOS
#DVOA
rank_teams_DVOA <- FootballOutsiders %>%
mutate(
DVOAVezesAttempt = DVOA * Runs
) %>%
group_by(Team) %>%
mutate(
CorridasTime = sum(Runs),
DVOA_Media_Ponderada = sum(DVOAVezesAttempt) / CorridasTime
) %>%
select(Team, DVOA_Media_Ponderada) %>% distinct %>%
arrange(desc(DVOA_Media_Ponderada))
rank_teams_DVOA$rank <- NA
rank_teams_DVOA$rank <- 1:nrow(rank_teams_DVOA)
rank_teams_DVOA
#DYAR
rank_teams_DYAR <- FootballOutsiders %>%
mutate(
DYARVezesAttempt = DYAR.. * Runs
) %>%
group_by(Team) %>%
mutate(
CorridasTime = sum(Runs),
DYAR_Media_Ponderada = sum(DYARVezesAttempt) / CorridasTime
) %>%
select(Team, DYAR_Media_Ponderada) %>% distinct %>%
arrange(desc(DYAR_Media_Ponderada))
rank_teams_DYAR$rank <- NA
rank_teams_DYAR$rank <- 1:nrow(rank_teams_DYAR)
rank_teams_DYAR
#Success Rate
rank_teams_sucrate <- FootballOutsiders %>%
mutate(
SuccessRateVezesAttempt = Succ..Rate * Runs
) %>%
group_by(Team) %>%
mutate(
CorridasTime = sum(Runs),
Succ.Rate_Media_Ponderada = sum(SuccessRateVezesAttempt) / CorridasTime
) %>%
select(Team, Succ.Rate_Media_Ponderada) %>% distinct %>%
arrange(desc(Succ.Rate_Media_Ponderada))
rank_teams_sucrate$rank <- NA
rank_teams_sucrate$rank <- 1:nrow(rank_teams_sucrate)
rank_teams_sucrate
#Comparar stats dos Running Backs com o EPA Médio Geral dos times
#Epa Terrestre per attmpt
a <- rank_teams_EPA_T_attempt %>% arrange(Time)
a$rank
[1] 1 31 2 22 7 28 16 13 3 18 26 4 9 6 19 17 25 23 8 14 15 21 30 11 10 29 12 20 27 5 24
b <- rank_times_epaMedio %>% arrange(posteam)
b$rank
[1] 15 10 1 21 27 26 28 24 4 23 19 9 6 18 22 2 16 12 5 17 3 25 31 14 11 30 13 7 20 8 29
print("Epa Terrestre per attempt vs Epa Medio")
[1] "Epa Terrestre per attempt vs Epa Medio"
cor(a$rank, b$rank, method = "pearson")
[1] 0.5080645
#Epa Terrestre Longo per attmpt
a <- rank_teams_EPA_T_longo_attempt %>% arrange(Time)
a$rank
[1] 17 25 16 18 3 24 9 1 4 22 30 10 8 5 6 29 19 28 15 14 23 7 31 11 21 27 12 20 26 2 13
b <- rank_times_epaMedio %>% arrange(posteam)
b$rank
[1] 15 10 1 21 27 26 28 24 4 23 19 9 6 18 22 2 16 12 5 17 3 25 31 14 11 30 13 7 20 8 29
print("Epa Terrestre Longo per attempt vs Epa Medio")
[1] "Epa Terrestre Longo per attempt vs Epa Medio"
cor(a$rank, b$rank, method = "pearson")
[1] 0.006451613
#Epa Aéreo
a <- rank_teams_epa_aereo %>% arrange(Time)
a$rank
[1] 19 16 3 29 4 27 10 26 17 25 5 9 31 18 30 23 28 7 2 15 14 20 12 11 8 1 13 22 21 6 24
b <- rank_times_epaMedio %>% arrange(posteam)
b$rank
[1] 15 10 1 21 27 26 28 24 4 23 19 9 6 18 22 2 16 12 5 17 3 25 31 14 11 30 13 7 20 8 29
print("Epa Aéreo vs Epa Medio")
[1] "Epa Aéreo vs Epa Medio"
cor(a$rank, b$rank, method = "pearson")
[1] 0.1370968
#OFR
a <- rank_teams_OFR %>% arrange(Time)
a$rank
[1] 17 16 13 14 23 22 27 6 29 24 30 25 12 3 18 10 20 21 11 28 19 4 31 2 26 1 15 9 8 7 5
b <- rank_times_epaMedio %>% arrange(posteam)
b$rank
[1] 15 10 1 21 27 26 28 24 4 23 19 9 6 18 22 2 16 12 5 17 3 25 31 14 11 30 13 7 20 8 29
print("OFR vs Epa Medio")
[1] "OFR vs Epa Medio"
cor(a$rank, b$rank, method = "pearson")
[1] 0.02741935
#Epa Yards After Catch
a <- rank_teams_epayac %>% arrange(Time)
a$rank
[1] 9 26 1 11 28 19 13 18 25 15 27 20 31 3 30 14 23 24 7 6 21 29 22 8 16 2 17 10 12 4 5
b <- rank_times_epaMedio %>% arrange(posteam)
b$rank
[1] 15 10 1 21 27 26 28 24 4 23 19 9 6 18 22 2 16 12 5 17 3 25 31 14 11 30 13 7 20 8 29
print("EPA Yards After Catch vs Epa Medio")
[1] "EPA Yards After Catch vs Epa Medio"
cor(a$rank, b$rank, method = "pearson")
[1] 0.04919355
#Yards Before Contact/Attempt
a <- rank_teams_YardsBeforeContact %>% arrange(Tm)
a$rank
[1] 3 18 5 13 2 17 26 14 11 8 27 6 15 7 30 19 21 12 9 16 4 23 31 22 10 29 24 1 28 20 25
b <- rank_times_epaMedio %>% arrange(posteam)
b$rank
[1] 15 10 1 21 27 26 28 24 4 23 19 9 6 18 22 2 16 12 5 17 3 25 31 14 11 30 13 7 20 8 29
print("Yards Before Contact/Attempt vs Epa Medio")
[1] "Yards Before Contact/Attempt vs Epa Medio"
cor(a$rank, b$rank, method = "pearson")
[1] 0.4971774
#Yards After Contact/Attempt
a <- rank_teams_YardsAfterContact %>% arrange(Tm)
a$rank
[1] 22 31 5 16 27 30 12 2 11 25 24 18 15 21 3 6 17 28 13 29 20 4 23 9 14 8 7 26 19 1 10
b <- rank_times_epaMedio %>% arrange(posteam)
b$rank
[1] 15 10 1 21 27 26 28 24 4 23 19 9 6 18 22 2 16 12 5 17 3 25 31 14 11 30 13 7 20 8 29
print("Yards After Contact/Attempt vs Epa Medio")
[1] "Yards After Contact/Attempt vs Epa Medio"
cor(a$rank, b$rank, method = "pearson")
[1] 0.09314516
#Broken Tackle
a <- rank_teams_BrokenTackles %>% arrange(Tm)
a$rank
[1] 20 27 17 9 28 2 15 4 16 5 19 3 12 30 26 10 21 11 14 24 1 18 23 13 22 29 6 25 8 7 31
b <- rank_times_epaMedio %>% arrange(posteam)
b$rank
[1] 15 10 1 21 27 26 28 24 4 23 19 9 6 18 22 2 16 12 5 17 3 25 31 14 11 30 13 7 20 8 29
print("Broken Tackles vs Epa Medio")
[1] "Broken Tackles vs Epa Medio"
cor(a$rank, b$rank, method = "pearson")
[1] 0.2858871
#8+D%
a <- rank_teams_8manbox %>% arrange(TEAM)
a$rank
[1] 30 13 14 15 12 18 31 25 19 22 7 17 23 26 4 29 27 11 8 3 10 28 21 20 24 9 16 2 5 1 6
b <- rank_times_epaMedio %>% arrange(posteam)
b$rank
[1] 15 10 1 21 27 26 28 24 4 23 19 9 6 18 22 2 16 12 5 17 3 25 31 14 11 30 13 7 20 8 29
print("8 man in the box Percentage vs Epa Medio")
[1] "8 man in the box Percentage vs Epa Medio"
cor(a$rank, b$rank, method = "pearson")
[1] 0.08346774
#Time Behind LOS
a <- rank_teams_TBLOS %>% arrange(TEAM)
a$rank
[1] 8 5 27 21 26 22 13 2 23 4 24 30 20 1 18 17 9 3 15 29 25 11 14 28 7 16 12 6 31 19 10
b <- rank_times_epaMedio %>% arrange(posteam)
b$rank
[1] 15 10 1 21 27 26 28 24 4 23 19 9 6 18 22 2 16 12 5 17 3 25 31 14 11 30 13 7 20 8 29
print("Time Behind Line Of Scrimage vs Epa Medio")
[1] "Time Behind Line Of Scrimage vs Epa Medio"
cor(a$rank, b$rank, method = "pearson")
[1] -0.1584677
#DVOA
a <- rank_teams_DVOA %>% arrange(Team)
a$rank
[1] 1 26 2 22 4 28 16 9 3 18 29 5 19 13 24 21 25 17 8 23 7 14 31 15 12 27 11 10 30 6 20
b <- rank_times_epaMedio %>% arrange(posteam)
b$rank
[1] 15 10 1 21 27 26 28 24 4 23 19 9 6 18 22 2 16 12 5 17 3 25 31 14 11 30 13 7 20 8 29
print("DVOA vs Epa Medio")
[1] "DVOA vs Epa Medio"
cor(a$rank, b$rank, method = "pearson")
[1] 0.4850806
#DYAR
a <- rank_teams_DYAR %>% arrange(Team)
a$rank
[1] 4 27 3 23 2 30 12 6 1 17 28 7 18 10 25 22 24 16 8 21 11 14 31 13 19 26 9 15 29 5 20
b <- rank_times_epaMedio %>% arrange(posteam)
b$rank
[1] 15 10 1 21 27 26 28 24 4 23 19 9 6 18 22 2 16 12 5 17 3 25 31 14 11 30 13 7 20 8 29
print("DYAR vs Epa Medio")
[1] "DYAR vs Epa Medio"
cor(a$rank, b$rank, method = "pearson")
[1] 0.3935484
#Success Rate
a <- rank_teams_sucrate %>% arrange(Team)
a$rank
[1] 9 31 1 17 18 24 23 26 3 21 8 5 7 6 29 12 14 16 25 13 4 27 30 10 15 20 2 22 28 11 19
b <- rank_times_epaMedio %>% arrange(posteam)
b$rank
[1] 15 10 1 21 27 26 28 24 4 23 19 9 6 18 22 2 16 12 5 17 3 25 31 14 11 30 13 7 20 8 29
print("Success Rate Running Game vs Epa Medio")
[1] "Success Rate Running Game vs Epa Medio"
cor(a$rank, b$rank, method = "pearson")
[1] 0.5693548
print("############################################################")
[1] "############################################################"
#Comparar stats dos Running Backs com a taxa de conversão de primeiras descidas.
#Epa Terrestre per attmpt
a <- rank_teams_EPA_T_attempt %>% arrange(Time)
a$rank
[1] 1 31 2 22 7 28 16 13 3 18 26 4 9 6 19 17 25 23 8 14 15 21 30 11 10 29 12 20 27 5 24
b <- rank_times_FstPct %>% arrange(posteam)
b$rank
[1] 18 2 17 8 10 31 14 11 9 22 23 30 20 19 26 3 15 5 28 21 6 12 25 24 13 29 16 4 7 1 27
print("Epa Terrestre per attempt vs 1st Down Cnv")
[1] "Epa Terrestre per attempt vs 1st Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.03548387
#Epa Terrestre Longo per attmpt
a <- rank_teams_EPA_T_longo_attempt %>% arrange(Time)
a$rank
[1] 17 25 16 18 3 24 9 1 4 22 30 10 8 5 6 29 19 28 15 14 23 7 31 11 21 27 12 20 26 2 13
b <- rank_times_FstPct %>% arrange(posteam)
b$rank
[1] 18 2 17 8 10 31 14 11 9 22 23 30 20 19 26 3 15 5 28 21 6 12 25 24 13 29 16 4 7 1 27
print("Epa Terrestre Longo per attempt vs 1st Down Cnv")
[1] "Epa Terrestre Longo per attempt vs 1st Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.007258065
#Epa Aéreo
a <- rank_teams_epa_aereo %>% arrange(Time)
a$rank
[1] 19 16 3 29 4 27 10 26 17 25 5 9 31 18 30 23 28 7 2 15 14 20 12 11 8 1 13 22 21 6 24
b <- rank_times_FstPct %>% arrange(posteam)
b$rank
[1] 18 2 17 8 10 31 14 11 9 22 23 30 20 19 26 3 15 5 28 21 6 12 25 24 13 29 16 4 7 1 27
print("Epa Aéreo vs 1st Down Cnv")
[1] "Epa Aéreo vs 1st Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] -0.05362903
#OFR
a <- rank_teams_OFR %>% arrange(Time)
a$rank
[1] 17 16 13 14 23 22 27 6 29 24 30 25 12 3 18 10 20 21 11 28 19 4 31 2 26 1 15 9 8 7 5
b <- rank_times_FstPct %>% arrange(posteam)
b$rank
[1] 18 2 17 8 10 31 14 11 9 22 23 30 20 19 26 3 15 5 28 21 6 12 25 24 13 29 16 4 7 1 27
print("OFR vs 1st Down Cnv")
[1] "OFR vs 1st Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.09758065
#Epa Yards After Catch
a <- rank_teams_epayac %>% arrange(Time)
a$rank
[1] 9 26 1 11 28 19 13 18 25 15 27 20 31 3 30 14 23 24 7 6 21 29 22 8 16 2 17 10 12 4 5
b <- rank_times_FstPct %>% arrange(posteam)
b$rank
[1] 18 2 17 8 10 31 14 11 9 22 23 30 20 19 26 3 15 5 28 21 6 12 25 24 13 29 16 4 7 1 27
print("EPA Yards After Catch vs 1st Down Cnv")
[1] "EPA Yards After Catch vs 1st Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] -0.1165323
#Yards Before Contact/Attempt
a <- rank_teams_YardsBeforeContact %>% arrange(Tm)
a$rank
[1] 3 18 5 13 2 17 26 14 11 8 27 6 15 7 30 19 21 12 9 16 4 23 31 22 10 29 24 1 28 20 25
b <- rank_times_FstPct %>% arrange(posteam)
b$rank
[1] 18 2 17 8 10 31 14 11 9 22 23 30 20 19 26 3 15 5 28 21 6 12 25 24 13 29 16 4 7 1 27
print("Yards Before Contact/Attempt vs 1st Down Cnv")
[1] "Yards Before Contact/Attempt vs 1st Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.2298387
#Yards After Contact/Attempt
a <- rank_teams_YardsAfterContact %>% arrange(Tm)
a$rank
[1] 22 31 5 16 27 30 12 2 11 25 24 18 15 21 3 6 17 28 13 29 20 4 23 9 14 8 7 26 19 1 10
b <- rank_times_FstPct %>% arrange(posteam)
b$rank
[1] 18 2 17 8 10 31 14 11 9 22 23 30 20 19 26 3 15 5 28 21 6 12 25 24 13 29 16 4 7 1 27
print("Yards After Contact/Attempt vs 1st Down Cnv")
[1] "Yards After Contact/Attempt vs 1st Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.008870968
#Broken Tackle
a <- rank_teams_BrokenTackles %>% arrange(Tm)
a$rank
[1] 20 27 17 9 28 2 15 4 16 5 19 3 12 30 26 10 21 11 14 24 1 18 23 13 22 29 6 25 8 7 31
b <- rank_times_FstPct %>% arrange(posteam)
b$rank
[1] 18 2 17 8 10 31 14 11 9 22 23 30 20 19 26 3 15 5 28 21 6 12 25 24 13 29 16 4 7 1 27
print("Broken Tackles vs 1st Down Cnv")
[1] "Broken Tackles vs 1st Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.1330645
#8+D%
a <- rank_teams_8manbox %>% arrange(TEAM)
a$rank
[1] 30 13 14 15 12 18 31 25 19 22 7 17 23 26 4 29 27 11 8 3 10 28 21 20 24 9 16 2 5 1 6
b <- rank_times_FstPct %>% arrange(posteam)
b$rank
[1] 18 2 17 8 10 31 14 11 9 22 23 30 20 19 26 3 15 5 28 21 6 12 25 24 13 29 16 4 7 1 27
print("8 man in the box Percentage vs 1st Down Cnv")
[1] "8 man in the box Percentage vs 1st Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.01169355
#Time Behind LOS
a <- rank_teams_TBLOS %>% arrange(TEAM)
a$rank
[1] 8 5 27 21 26 22 13 2 23 4 24 30 20 1 18 17 9 3 15 29 25 11 14 28 7 16 12 6 31 19 10
b <- rank_times_FstPct %>% arrange(posteam)
b$rank
[1] 18 2 17 8 10 31 14 11 9 22 23 30 20 19 26 3 15 5 28 21 6 12 25 24 13 29 16 4 7 1 27
print("Time Behind Line Of Scrimage vs 1st Down Cnv")
[1] "Time Behind Line Of Scrimage vs 1st Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.1758065
#DVOA
a <- rank_teams_DVOA %>% arrange(Team)
a$rank
[1] 1 26 2 22 4 28 16 9 3 18 29 5 19 13 24 21 25 17 8 23 7 14 31 15 12 27 11 10 30 6 20
b <- rank_times_FstPct %>% arrange(posteam)
b$rank
[1] 18 2 17 8 10 31 14 11 9 22 23 30 20 19 26 3 15 5 28 21 6 12 25 24 13 29 16 4 7 1 27
print("DVOA vs 1st Down Cnv")
[1] "DVOA vs 1st Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.2225806
#DYAR
a <- rank_teams_DYAR %>% arrange(Team)
a$rank
[1] 4 27 3 23 2 30 12 6 1 17 28 7 18 10 25 22 24 16 8 21 11 14 31 13 19 26 9 15 29 5 20
b <- rank_times_FstPct %>% arrange(posteam)
b$rank
[1] 18 2 17 8 10 31 14 11 9 22 23 30 20 19 26 3 15 5 28 21 6 12 25 24 13 29 16 4 7 1 27
print("DYAR vs 1st Down Cnv")
[1] "DYAR vs 1st Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.1979839
#Success Rate
a <- rank_teams_sucrate %>% arrange(Team)
a$rank
[1] 9 31 1 17 18 24 23 26 3 21 8 5 7 6 29 12 14 16 25 13 4 27 30 10 15 20 2 22 28 11 19
b <- rank_times_FstPct %>% arrange(posteam)
b$rank
[1] 18 2 17 8 10 31 14 11 9 22 23 30 20 19 26 3 15 5 28 21 6 12 25 24 13 29 16 4 7 1 27
print("Success Rate Running Game vs 1st Down Cnv")
[1] "Success Rate Running Game vs 1st Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.02258065
print("############################################################")
[1] "############################################################"
#Comparar stats dos Running Backs com a taxa de conversão de segundas descidas.
#Epa Terrestre per attmpt
a <- rank_teams_EPA_T_attempt %>% arrange(Time)
a$rank
[1] 1 31 2 22 7 28 16 13 3 18 26 4 9 6 19 17 25 23 8 14 15 21 30 11 10 29 12 20 27 5 24
b <- rank_times_SndPct %>% arrange(posteam)
b$rank
[1] 18 15 1 25 8 14 30 24 4 27 20 7 5 19 26 11 13 10 9 16 2 29 31 12 22 23 3 28 21 6 17
print("Epa Terrestre per attempt vs 2nd Down Cnv")
[1] "Epa Terrestre per attempt vs 2nd Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.5100806
#Epa Terrestre Longo per attmpt
a <- rank_teams_EPA_T_longo_attempt %>% arrange(Time)
a$rank
[1] 17 25 16 18 3 24 9 1 4 22 30 10 8 5 6 29 19 28 15 14 23 7 31 11 21 27 12 20 26 2 13
b <- rank_times_SndPct %>% arrange(posteam)
b$rank
[1] 18 15 1 25 8 14 30 24 4 27 20 7 5 19 26 11 13 10 9 16 2 29 31 12 22 23 3 28 21 6 17
print("Epa Terrestre Longo per attempt vs 2nd Down Cnv")
[1] "Epa Terrestre Longo per attempt vs 2nd Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.1778226
#Epa Aéreo
a <- rank_teams_epa_aereo %>% arrange(Time)
a$rank
[1] 19 16 3 29 4 27 10 26 17 25 5 9 31 18 30 23 28 7 2 15 14 20 12 11 8 1 13 22 21 6 24
b <- rank_times_SndPct %>% arrange(posteam)
b$rank
[1] 18 15 1 25 8 14 30 24 4 27 20 7 5 19 26 11 13 10 9 16 2 29 31 12 22 23 3 28 21 6 17
print("Epa Aéreo vs 2nd Down Cnv")
[1] "Epa Aéreo vs 2nd Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.2770161
#OFR
a <- rank_teams_OFR %>% arrange(Time)
a$rank
[1] 17 16 13 14 23 22 27 6 29 24 30 25 12 3 18 10 20 21 11 28 19 4 31 2 26 1 15 9 8 7 5
b <- rank_times_SndPct %>% arrange(posteam)
b$rank
[1] 18 15 1 25 8 14 30 24 4 27 20 7 5 19 26 11 13 10 9 16 2 29 31 12 22 23 3 28 21 6 17
print("OFR vs 2nd Down Cnv")
[1] "OFR vs 2nd Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] -0.001612903
#Epa Yards After Catch
a <- rank_teams_epayac %>% arrange(Time)
a$rank
[1] 9 26 1 11 28 19 13 18 25 15 27 20 31 3 30 14 23 24 7 6 21 29 22 8 16 2 17 10 12 4 5
b <- rank_times_SndPct %>% arrange(posteam)
b$rank
[1] 18 15 1 25 8 14 30 24 4 27 20 7 5 19 26 11 13 10 9 16 2 29 31 12 22 23 3 28 21 6 17
print("EPA Yards After Catch vs 2nd Down Cnv")
[1] "EPA Yards After Catch vs 2nd Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] -0.006451613
#Yards Before Contact/Attempt
a <- rank_teams_YardsBeforeContact %>% arrange(Tm)
a$rank
[1] 3 18 5 13 2 17 26 14 11 8 27 6 15 7 30 19 21 12 9 16 4 23 31 22 10 29 24 1 28 20 25
b <- rank_times_SndPct %>% arrange(posteam)
b$rank
[1] 18 15 1 25 8 14 30 24 4 27 20 7 5 19 26 11 13 10 9 16 2 29 31 12 22 23 3 28 21 6 17
print("Yards Before Contact/Attempt vs 2nd Down Cnv")
[1] "Yards Before Contact/Attempt vs 2nd Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.353629
#Yards After Contact/Attempt
a <- rank_teams_YardsAfterContact %>% arrange(Tm)
a$rank
[1] 22 31 5 16 27 30 12 2 11 25 24 18 15 21 3 6 17 28 13 29 20 4 23 9 14 8 7 26 19 1 10
b <- rank_times_SndPct %>% arrange(posteam)
b$rank
[1] 18 15 1 25 8 14 30 24 4 27 20 7 5 19 26 11 13 10 9 16 2 29 31 12 22 23 3 28 21 6 17
print("Yards After Contact/Attempt vs 2nd Down Cnv")
[1] "Yards After Contact/Attempt vs 2nd Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.07741935
#Broken Tackle
a <- rank_teams_BrokenTackles %>% arrange(Tm)
a$rank
[1] 20 27 17 9 28 2 15 4 16 5 19 3 12 30 26 10 21 11 14 24 1 18 23 13 22 29 6 25 8 7 31
b <- rank_times_SndPct %>% arrange(posteam)
b$rank
[1] 18 15 1 25 8 14 30 24 4 27 20 7 5 19 26 11 13 10 9 16 2 29 31 12 22 23 3 28 21 6 17
print("Broken Tackles vs 2nd Down Cnv")
[1] "Broken Tackles vs 2nd Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.3133065
#8+D%
a <- rank_teams_8manbox %>% arrange(TEAM)
a$rank
[1] 30 13 14 15 12 18 31 25 19 22 7 17 23 26 4 29 27 11 8 3 10 28 21 20 24 9 16 2 5 1 6
b <- rank_times_SndPct %>% arrange(posteam)
b$rank
[1] 18 15 1 25 8 14 30 24 4 27 20 7 5 19 26 11 13 10 9 16 2 29 31 12 22 23 3 28 21 6 17
print("8 man in the box Percentage vs 2nd Down Cnv")
[1] "8 man in the box Percentage vs 2nd Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.1544355
#Time Behind LOS
a <- rank_teams_TBLOS %>% arrange(TEAM)
a$rank
[1] 8 5 27 21 26 22 13 2 23 4 24 30 20 1 18 17 9 3 15 29 25 11 14 28 7 16 12 6 31 19 10
b <- rank_times_SndPct %>% arrange(posteam)
b$rank
[1] 18 15 1 25 8 14 30 24 4 27 20 7 5 19 26 11 13 10 9 16 2 29 31 12 22 23 3 28 21 6 17
print("Time Behind Line Of Scrimage vs 2nd Down Cnv")
[1] "Time Behind Line Of Scrimage vs 2nd Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] -0.403629
#DVOA
a <- rank_teams_DVOA %>% arrange(Team)
a$rank
[1] 1 26 2 22 4 28 16 9 3 18 29 5 19 13 24 21 25 17 8 23 7 14 31 15 12 27 11 10 30 6 20
b <- rank_times_SndPct %>% arrange(posteam)
b$rank
[1] 18 15 1 25 8 14 30 24 4 27 20 7 5 19 26 11 13 10 9 16 2 29 31 12 22 23 3 28 21 6 17
print("DVOA vs 2nd Down Cnv")
[1] "DVOA vs 2nd Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.4653226
#DYAR
a <- rank_teams_DYAR %>% arrange(Team)
a$rank
[1] 4 27 3 23 2 30 12 6 1 17 28 7 18 10 25 22 24 16 8 21 11 14 31 13 19 26 9 15 29 5 20
b <- rank_times_SndPct %>% arrange(posteam)
b$rank
[1] 18 15 1 25 8 14 30 24 4 27 20 7 5 19 26 11 13 10 9 16 2 29 31 12 22 23 3 28 21 6 17
print("DYAR vs 2nd Down Cnv")
[1] "DYAR vs 2nd Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.4717742
#Success Rate
a <- rank_teams_sucrate %>% arrange(Team)
a$rank
[1] 9 31 1 17 18 24 23 26 3 21 8 5 7 6 29 12 14 16 25 13 4 27 30 10 15 20 2 22 28 11 19
b <- rank_times_SndPct %>% arrange(posteam)
b$rank
[1] 18 15 1 25 8 14 30 24 4 27 20 7 5 19 26 11 13 10 9 16 2 29 31 12 22 23 3 28 21 6 17
print("Success Rate Running Game vs 2nd Down Cnv")
[1] "Success Rate Running Game vs 2nd Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.6955645
print("############################################################")
[1] "############################################################"
#Comparar stats dos Running Backs com a taxa de conversão de terceiras descidas.
#Epa Terrestre per attmpt
a <- rank_teams_EPA_T_attempt %>% arrange(Time)
a$rank
[1] 1 31 2 22 7 28 16 13 3 18 26 4 9 6 19 17 25 23 8 14 15 21 30 11 10 29 12 20 27 5 24
b <- rank_times_TrdPct %>% arrange(posteam)
b$rank
[1] 25 4 3 26 29 19 21 22 2 27 11 20 12 8 28 1 16 10 5 17 13 14 30 9 6 23 18 7 15 24 31
print("Epa Terrestre per attempt vs 3rd Down Cnv")
[1] "Epa Terrestre per attempt vs 3rd Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.1850806
#Epa Terrestre Longo per attmpt
a <- rank_teams_EPA_T_longo_attempt %>% arrange(Time)
a$rank
[1] 17 25 16 18 3 24 9 1 4 22 30 10 8 5 6 29 19 28 15 14 23 7 31 11 21 27 12 20 26 2 13
b <- rank_times_TrdPct %>% arrange(posteam)
b$rank
[1] 25 4 3 26 29 19 21 22 2 27 11 20 12 8 28 1 16 10 5 17 13 14 30 9 6 23 18 7 15 24 31
print("Epa Terrestre Longo per attempt vs 3rd Down Cnv")
[1] "Epa Terrestre Longo per attempt vs 3rd Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] -0.1649194
#Epa Aéreo
a <- rank_teams_epa_aereo %>% arrange(Time)
a$rank
[1] 19 16 3 29 4 27 10 26 17 25 5 9 31 18 30 23 28 7 2 15 14 20 12 11 8 1 13 22 21 6 24
b <- rank_times_TrdPct %>% arrange(posteam)
b$rank
[1] 25 4 3 26 29 19 21 22 2 27 11 20 12 8 28 1 16 10 5 17 13 14 30 9 6 23 18 7 15 24 31
print("Epa Aéreo vs 3rd Down Cnv")
[1] "Epa Aéreo vs 3rd Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.1879032
#OFR
a <- rank_teams_OFR %>% arrange(Time)
a$rank
[1] 17 16 13 14 23 22 27 6 29 24 30 25 12 3 18 10 20 21 11 28 19 4 31 2 26 1 15 9 8 7 5
b <- rank_times_TrdPct %>% arrange(posteam)
b$rank
[1] 25 4 3 26 29 19 21 22 2 27 11 20 12 8 28 1 16 10 5 17 13 14 30 9 6 23 18 7 15 24 31
print("OFR vs 3rd Down Cnv")
[1] "OFR vs 3rd Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.09072581
#Epa Yards After Catch
a <- rank_teams_epayac %>% arrange(Time)
a$rank
[1] 9 26 1 11 28 19 13 18 25 15 27 20 31 3 30 14 23 24 7 6 21 29 22 8 16 2 17 10 12 4 5
b <- rank_times_TrdPct %>% arrange(posteam)
b$rank
[1] 25 4 3 26 29 19 21 22 2 27 11 20 12 8 28 1 16 10 5 17 13 14 30 9 6 23 18 7 15 24 31
print("EPA Yards After Catch vs 3rd Down Cnv")
[1] "EPA Yards After Catch vs 3rd Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.0125
#Yards Before Contact/Attempt
a <- rank_teams_YardsBeforeContact %>% arrange(Tm)
a$rank
[1] 3 18 5 13 2 17 26 14 11 8 27 6 15 7 30 19 21 12 9 16 4 23 31 22 10 29 24 1 28 20 25
b <- rank_times_TrdPct %>% arrange(posteam)
b$rank
[1] 25 4 3 26 29 19 21 22 2 27 11 20 12 8 28 1 16 10 5 17 13 14 30 9 6 23 18 7 15 24 31
print("Yards Before Contact/Attempt vs 3rd Down Cnv")
[1] "Yards Before Contact/Attempt vs 3rd Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.2681452
#Yards After Contact/Attempt
a <- rank_teams_YardsAfterContact %>% arrange(Tm)
a$rank
[1] 22 31 5 16 27 30 12 2 11 25 24 18 15 21 3 6 17 28 13 29 20 4 23 9 14 8 7 26 19 1 10
b <- rank_times_TrdPct %>% arrange(posteam)
b$rank
[1] 25 4 3 26 29 19 21 22 2 27 11 20 12 8 28 1 16 10 5 17 13 14 30 9 6 23 18 7 15 24 31
print("Yards After Contact/Attempt vs 3rd Down Cnv")
[1] "Yards After Contact/Attempt vs 3rd Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] -0.0125
#Broken Tackle
a <- rank_teams_BrokenTackles %>% arrange(Tm)
a$rank
[1] 20 27 17 9 28 2 15 4 16 5 19 3 12 30 26 10 21 11 14 24 1 18 23 13 22 29 6 25 8 7 31
b <- rank_times_TrdPct %>% arrange(posteam)
b$rank
[1] 25 4 3 26 29 19 21 22 2 27 11 20 12 8 28 1 16 10 5 17 13 14 30 9 6 23 18 7 15 24 31
print("Broken Tackles vs 3rd Down Cnv")
[1] "Broken Tackles vs 3rd Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.03830645
#8+D%
a <- rank_teams_8manbox %>% arrange(TEAM)
a$rank
[1] 30 13 14 15 12 18 31 25 19 22 7 17 23 26 4 29 27 11 8 3 10 28 21 20 24 9 16 2 5 1 6
b <- rank_times_TrdPct %>% arrange(posteam)
b$rank
[1] 25 4 3 26 29 19 21 22 2 27 11 20 12 8 28 1 16 10 5 17 13 14 30 9 6 23 18 7 15 24 31
print("8 man in the box Percentage vs 3rd Down Cnv")
[1] "8 man in the box Percentage vs 3rd Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] -0.09435484
#Time Behind LOS
a <- rank_teams_TBLOS %>% arrange(TEAM)
a$rank
[1] 8 5 27 21 26 22 13 2 23 4 24 30 20 1 18 17 9 3 15 29 25 11 14 28 7 16 12 6 31 19 10
b <- rank_times_TrdPct %>% arrange(posteam)
b$rank
[1] 25 4 3 26 29 19 21 22 2 27 11 20 12 8 28 1 16 10 5 17 13 14 30 9 6 23 18 7 15 24 31
print("Time Behind Line Of Scrimage vs 3rd Down Cnv")
[1] "Time Behind Line Of Scrimage vs 3rd Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] -0.008467742
#DVOA
a <- rank_teams_DVOA %>% arrange(Team)
a$rank
[1] 1 26 2 22 4 28 16 9 3 18 29 5 19 13 24 21 25 17 8 23 7 14 31 15 12 27 11 10 30 6 20
b <- rank_times_TrdPct %>% arrange(posteam)
b$rank
[1] 25 4 3 26 29 19 21 22 2 27 11 20 12 8 28 1 16 10 5 17 13 14 30 9 6 23 18 7 15 24 31
print("DVOA vs 3rd Down Cnv")
[1] "DVOA vs 3rd Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.1681452
#DYAR
a <- rank_teams_DYAR %>% arrange(Team)
a$rank
[1] 4 27 3 23 2 30 12 6 1 17 28 7 18 10 25 22 24 16 8 21 11 14 31 13 19 26 9 15 29 5 20
b <- rank_times_TrdPct %>% arrange(posteam)
b$rank
[1] 25 4 3 26 29 19 21 22 2 27 11 20 12 8 28 1 16 10 5 17 13 14 30 9 6 23 18 7 15 24 31
print("DYAR vs 3rd Down Cnv")
[1] "DYAR vs 3rd Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.1205645
#Success Rate
a <- rank_teams_sucrate %>% arrange(Team)
a$rank
[1] 9 31 1 17 18 24 23 26 3 21 8 5 7 6 29 12 14 16 25 13 4 27 30 10 15 20 2 22 28 11 19
b <- rank_times_TrdPct %>% arrange(posteam)
b$rank
[1] 25 4 3 26 29 19 21 22 2 27 11 20 12 8 28 1 16 10 5 17 13 14 30 9 6 23 18 7 15 24 31
print("Success Rate Running Game vs 3rd Down Cnv")
[1] "Success Rate Running Game vs 3rd Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.3108871
print("############################################################")
[1] "############################################################"
#Comparar stats dos Running Backs com a taxa de conversão de quartas descidas.
#Epa Terrestre per attmpt
a <- rank_teams_EPA_T_attempt %>% arrange(Time)
a$rank
[1] 1 31 2 22 7 28 16 13 3 18 26 4 9 6 19 17 25 23 8 14 15 21 30 11 10 29 12 20 27 5 24
b <- rank_times_FthPct %>% arrange(posteam)
b$rank
[1] 6 11 1 26 8 23 10 14 25 5 18 15 12 2 17 29 27 4 22 24 30 3 21 9 13 31 16 19 7 28 20
print("Epa Terrestre per attempt vs 4th Down Cnv")
[1] "Epa Terrestre per attempt vs 4th Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.2366935
#Epa Terrestre Longo per attmpt
a <- rank_teams_EPA_T_longo_attempt %>% arrange(Time)
a$rank
[1] 17 25 16 18 3 24 9 1 4 22 30 10 8 5 6 29 19 28 15 14 23 7 31 11 21 27 12 20 26 2 13
b <- rank_times_FthPct %>% arrange(posteam)
b$rank
[1] 6 11 1 26 8 23 10 14 25 5 18 15 12 2 17 29 27 4 22 24 30 3 21 9 13 31 16 19 7 28 20
print("Epa Terrestre Longo per attempt vs 4th Down Cnv")
[1] "Epa Terrestre Longo per attempt vs 4th Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.1959677
#Epa Aéreo
a <- rank_teams_epa_aereo %>% arrange(Time)
a$rank
[1] 19 16 3 29 4 27 10 26 17 25 5 9 31 18 30 23 28 7 2 15 14 20 12 11 8 1 13 22 21 6 24
b <- rank_times_FthPct %>% arrange(posteam)
b$rank
[1] 6 11 1 26 8 23 10 14 25 5 18 15 12 2 17 29 27 4 22 24 30 3 21 9 13 31 16 19 7 28 20
print("Epa Aéreo vs 4th Down Cnv")
[1] "Epa Aéreo vs 4th Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.06572581
#OFR
a <- rank_teams_OFR %>% arrange(Time)
a$rank
[1] 17 16 13 14 23 22 27 6 29 24 30 25 12 3 18 10 20 21 11 28 19 4 31 2 26 1 15 9 8 7 5
b <- rank_times_FthPct %>% arrange(posteam)
b$rank
[1] 6 11 1 26 8 23 10 14 25 5 18 15 12 2 17 29 27 4 22 24 30 3 21 9 13 31 16 19 7 28 20
print("OFR vs 4th Down Cnv")
[1] "OFR vs 4th Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.0766129
#Epa Yards After Catch
a <- rank_teams_epayac %>% arrange(Time)
a$rank
[1] 9 26 1 11 28 19 13 18 25 15 27 20 31 3 30 14 23 24 7 6 21 29 22 8 16 2 17 10 12 4 5
b <- rank_times_FthPct %>% arrange(posteam)
b$rank
[1] 6 11 1 26 8 23 10 14 25 5 18 15 12 2 17 29 27 4 22 24 30 3 21 9 13 31 16 19 7 28 20
print("EPA Yards After Catch vs 4th Down Cnv")
[1] "EPA Yards After Catch vs 4th Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] -0.07741935
#Yards Before Contact/Attempt
a <- rank_teams_YardsBeforeContact %>% arrange(Tm)
a$rank
[1] 3 18 5 13 2 17 26 14 11 8 27 6 15 7 30 19 21 12 9 16 4 23 31 22 10 29 24 1 28 20 25
b <- rank_times_FthPct %>% arrange(posteam)
b$rank
[1] 6 11 1 26 8 23 10 14 25 5 18 15 12 2 17 29 27 4 22 24 30 3 21 9 13 31 16 19 7 28 20
print("Yards Before Contact/Attempt vs 4th Down Cnv")
[1] "Yards Before Contact/Attempt vs 4th Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.2237903
#Yards After Contact/Attempt
a <- rank_teams_YardsAfterContact %>% arrange(Tm)
a$rank
[1] 22 31 5 16 27 30 12 2 11 25 24 18 15 21 3 6 17 28 13 29 20 4 23 9 14 8 7 26 19 1 10
b <- rank_times_FthPct %>% arrange(posteam)
b$rank
[1] 6 11 1 26 8 23 10 14 25 5 18 15 12 2 17 29 27 4 22 24 30 3 21 9 13 31 16 19 7 28 20
print("Yards After Contact/Attempt vs 4th Down Cnv")
[1] "Yards After Contact/Attempt vs 4th Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] -0.1262097
#Broken Tackle
a <- rank_teams_BrokenTackles %>% arrange(Tm)
a$rank
[1] 20 27 17 9 28 2 15 4 16 5 19 3 12 30 26 10 21 11 14 24 1 18 23 13 22 29 6 25 8 7 31
b <- rank_times_FthPct %>% arrange(posteam)
b$rank
[1] 6 11 1 26 8 23 10 14 25 5 18 15 12 2 17 29 27 4 22 24 30 3 21 9 13 31 16 19 7 28 20
print("Broken Tackles vs 4th Down Cnv")
[1] "Broken Tackles vs 4th Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] -0.09556452
#8+D%
a <- rank_teams_8manbox %>% arrange(TEAM)
a$rank
[1] 30 13 14 15 12 18 31 25 19 22 7 17 23 26 4 29 27 11 8 3 10 28 21 20 24 9 16 2 5 1 6
b <- rank_times_FthPct %>% arrange(posteam)
b$rank
[1] 6 11 1 26 8 23 10 14 25 5 18 15 12 2 17 29 27 4 22 24 30 3 21 9 13 31 16 19 7 28 20
print("8 man in the box Percentage vs 4th Down Cnv")
[1] "8 man in the box Percentage vs 4th Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] -0.2991935
#Time Behind LOS
a <- rank_teams_TBLOS %>% arrange(TEAM)
a$rank
[1] 8 5 27 21 26 22 13 2 23 4 24 30 20 1 18 17 9 3 15 29 25 11 14 28 7 16 12 6 31 19 10
b <- rank_times_FthPct %>% arrange(posteam)
b$rank
[1] 6 11 1 26 8 23 10 14 25 5 18 15 12 2 17 29 27 4 22 24 30 3 21 9 13 31 16 19 7 28 20
print("Time Behind Line Of Scrimage vs 4th Down Cnv")
[1] "Time Behind Line Of Scrimage vs 4th Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.2346774
#DVOA
a <- rank_teams_DVOA %>% arrange(Team)
a$rank
[1] 1 26 2 22 4 28 16 9 3 18 29 5 19 13 24 21 25 17 8 23 7 14 31 15 12 27 11 10 30 6 20
b <- rank_times_FthPct %>% arrange(posteam)
b$rank
[1] 6 11 1 26 8 23 10 14 25 5 18 15 12 2 17 29 27 4 22 24 30 3 21 9 13 31 16 19 7 28 20
print("DVOA vs 4th Down Cnv")
[1] "DVOA vs 4th Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.2302419
#DYAR
a <- rank_teams_DYAR %>% arrange(Team)
a$rank
[1] 4 27 3 23 2 30 12 6 1 17 28 7 18 10 25 22 24 16 8 21 11 14 31 13 19 26 9 15 29 5 20
b <- rank_times_FthPct %>% arrange(posteam)
b$rank
[1] 6 11 1 26 8 23 10 14 25 5 18 15 12 2 17 29 27 4 22 24 30 3 21 9 13 31 16 19 7 28 20
print("DYAR vs 4th Down Cnv")
[1] "DYAR vs 4th Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] 0.2705645
#Success Rate
a <- rank_teams_sucrate %>% arrange(Team)
a$rank
[1] 9 31 1 17 18 24 23 26 3 21 8 5 7 6 29 12 14 16 25 13 4 27 30 10 15 20 2 22 28 11 19
b <- rank_times_FthPct %>% arrange(posteam)
b$rank
[1] 6 11 1 26 8 23 10 14 25 5 18 15 12 2 17 29 27 4 22 24 30 3 21 9 13 31 16 19 7 28 20
print("Success Rate Running Game vs 4th Down Cnv")
[1] "Success Rate Running Game vs 4th Down Cnv"
cor(a$rank, b$rank, method = "pearson")
[1] -0.03951613
print("############################################################")
[1] "############################################################"
#Comparar stats dos Running Backs com o Offensive DVOA do Football Outsiders.
rank_times_OffensiveDVOA <- c(13, 15, 1, 21, 27, 25, 29, 20, 2, 26, 18, 8, 17, 19, 24, 3, 12, 16, 10, 11, 4, 22, 32, 9, 14, 31, 5, 7, 23, 6, 30)
#Epa Terrestre per attmpt
a <- rank_teams_EPA_T_attempt %>% arrange(Time)
a$rank
[1] 1 31 2 22 7 28 16 13 3 18 26 4 9 6 19 17 25 23 8 14 15 21 30 11 10 29 12 20 27 5 24
b <- rank_times_OffensiveDVOA
print("Epa Terrestre per attempt vs Offensive DVOA")
[1] "Epa Terrestre per attempt vs Offensive DVOA"
cor(a$rank, b, method = "pearson")
[1] 0.5506623
#Epa Terrestre Longo per attmpt
a <- rank_teams_EPA_T_longo_attempt %>% arrange(Time)
a$rank
[1] 17 25 16 18 3 24 9 1 4 22 30 10 8 5 6 29 19 28 15 14 23 7 31 11 21 27 12 20 26 2 13
b <- rank_times_OffensiveDVOA
b
[1] 13 15 1 21 27 25 29 20 2 26 18 8 17 19 24 3 12 16 10 11 4 22 32 9 14 31 5 7 23 6 30
print("Epa Terrestre Longo per attempt vs Offensive DVOA")
[1] "Epa Terrestre Longo per attempt vs Offensive DVOA"
cor(a$rank, b, method = "pearson")
[1] 0.1033478
#Epa Aéreo
a <- rank_teams_epa_aereo %>% arrange(Time)
a$rank
[1] 19 16 3 29 4 27 10 26 17 25 5 9 31 18 30 23 28 7 2 15 14 20 12 11 8 1 13 22 21 6 24
b <- rank_times_OffensiveDVOA
b
[1] 13 15 1 21 27 25 29 20 2 26 18 8 17 19 24 3 12 16 10 11 4 22 32 9 14 31 5 7 23 6 30
print("Epa Aéreo vs Offensive DVOA")
[1] "Epa Aéreo vs Offensive DVOA"
cor(a$rank, b, method = "pearson")
[1] 0.161333
#OFR
a <- rank_teams_OFR %>% arrange(Time)
a$rank
[1] 17 16 13 14 23 22 27 6 29 24 30 25 12 3 18 10 20 21 11 28 19 4 31 2 26 1 15 9 8 7 5
b <- rank_times_OffensiveDVOA
b
[1] 13 15 1 21 27 25 29 20 2 26 18 8 17 19 24 3 12 16 10 11 4 22 32 9 14 31 5 7 23 6 30
print("OFR vs Offensive DVOA")
[1] "OFR vs Offensive DVOA"
cor(a$rank, b, method = "pearson")
[1] 0.02524526
#Epa Yards After Catch
a <- rank_teams_epayac %>% arrange(Time)
a$rank
[1] 9 26 1 11 28 19 13 18 25 15 27 20 31 3 30 14 23 24 7 6 21 29 22 8 16 2 17 10 12 4 5
b <- rank_times_OffensiveDVOA
b
[1] 13 15 1 21 27 25 29 20 2 26 18 8 17 19 24 3 12 16 10 11 4 22 32 9 14 31 5 7 23 6 30
print("EPA Yards After Catch vs Offensive DVOA")
[1] "EPA Yards After Catch vs Offensive DVOA"
cor(a$rank, b, method = "pearson")
[1] 0.1278041
#Yards Before Contact/Attempt
a <- rank_teams_YardsBeforeContact %>% arrange(Tm)
a$rank
[1] 3 18 5 13 2 17 26 14 11 8 27 6 15 7 30 19 21 12 9 16 4 23 31 22 10 29 24 1 28 20 25
b <- rank_times_OffensiveDVOA
b
[1] 13 15 1 21 27 25 29 20 2 26 18 8 17 19 24 3 12 16 10 11 4 22 32 9 14 31 5 7 23 6 30
print("Yards Before Contact/Attempt vs Offensive DVOA")
[1] "Yards Before Contact/Attempt vs Offensive DVOA"
cor(a$rank, b, method = "pearson")
[1] 0.4461311
#Yards After Contact/Attempt
a <- rank_teams_YardsAfterContact %>% arrange(Tm)
a$rank
[1] 22 31 5 16 27 30 12 2 11 25 24 18 15 21 3 6 17 28 13 29 20 4 23 9 14 8 7 26 19 1 10
b <- rank_times_OffensiveDVOA
b
[1] 13 15 1 21 27 25 29 20 2 26 18 8 17 19 24 3 12 16 10 11 4 22 32 9 14 31 5 7 23 6 30
print("Yards After Contact/Attempt vs Offensive DVOA")
[1] "Yards After Contact/Attempt vs Offensive DVOA"
cor(a$rank, b, method = "pearson")
[1] 0.1739556
#Broken Tackle
a <- rank_teams_BrokenTackles %>% arrange(Tm)
a$rank
[1] 20 27 17 9 28 2 15 4 16 5 19 3 12 30 26 10 21 11 14 24 1 18 23 13 22 29 6 25 8 7 31
b <- rank_times_OffensiveDVOA
b
[1] 13 15 1 21 27 25 29 20 2 26 18 8 17 19 24 3 12 16 10 11 4 22 32 9 14 31 5 7 23 6 30
print("Broken Tackles vs Offensive DVOA")
[1] "Broken Tackles vs Offensive DVOA"
cor(a$rank, b, method = "pearson")
[1] 0.3159602
#8+D%
a <- rank_teams_8manbox %>% arrange(TEAM)
a$rank
[1] 30 13 14 15 12 18 31 25 19 22 7 17 23 26 4 29 27 11 8 3 10 28 21 20 24 9 16 2 5 1 6
b <- rank_times_OffensiveDVOA
b
[1] 13 15 1 21 27 25 29 20 2 26 18 8 17 19 24 3 12 16 10 11 4 22 32 9 14 31 5 7 23 6 30
print("8 man in the box Percentage vs Offensive DVOA")
[1] "8 man in the box Percentage vs Offensive DVOA"
cor(a$rank, b, method = "pearson")
[1] 0.06232424
#Time Behind LOS
a <- rank_teams_TBLOS %>% arrange(TEAM)
a$rank
[1] 8 5 27 21 26 22 13 2 23 4 24 30 20 1 18 17 9 3 15 29 25 11 14 28 7 16 12 6 31 19 10
b <- rank_times_OffensiveDVOA
b
[1] 13 15 1 21 27 25 29 20 2 26 18 8 17 19 24 3 12 16 10 11 4 22 32 9 14 31 5 7 23 6 30
print("Time Behind Line Of Scrimage vs Offensive DVOA")
[1] "Time Behind Line Of Scrimage vs Offensive DVOA"
cor(a$rank, b, method = "pearson")
[1] -0.2090623
#DVOA
a <- rank_teams_DVOA %>% arrange(Team)
a$rank
[1] 1 26 2 22 4 28 16 9 3 18 29 5 19 13 24 21 25 17 8 23 7 14 31 15 12 27 11 10 30 6 20
b <- rank_times_OffensiveDVOA
b
[1] 13 15 1 21 27 25 29 20 2 26 18 8 17 19 24 3 12 16 10 11 4 22 32 9 14 31 5 7 23 6 30
print("DVOA vs Offensive DVOA")
[1] "DVOA vs Offensive DVOA"
cor(a$rank, b, method = "pearson")
[1] 0.5475066
#DYAR
a <- rank_teams_DYAR %>% arrange(Team)
a$rank
[1] 4 27 3 23 2 30 12 6 1 17 28 7 18 10 25 22 24 16 8 21 11 14 31 13 19 26 9 15 29 5 20
b <- rank_times_OffensiveDVOA
b
[1] 13 15 1 21 27 25 29 20 2 26 18 8 17 19 24 3 12 16 10 11 4 22 32 9 14 31 5 7 23 6 30
print("DYAR vs Offensive DVOA")
[1] "DYAR vs Offensive DVOA"
cor(a$rank, b, method = "pearson")
[1] 0.47966
#Success Rate
a <- rank_teams_sucrate %>% arrange(Team)
b <- rank_times_OffensiveDVOA
b
[1] 13 15 1 21 27 25 29 20 2 26 18 8 17 19 24 3 12 16 10 11 4 22 32 9 14 31 5 7 23 6 30
print("Success Rate Running Game vs Offensive DVOA")
[1] "Success Rate Running Game vs Offensive DVOA"
cor(a$rank, b, method = "pearson")
[1] 0.6567713
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoNCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShuYS50b29scykNCmxpYnJhcnkoZ2dpbWFnZSkNCg0KI25mbFNjcmFwUg0KcGJwIDwtIHJlYWRfY3N2KHVybCgiaHR0cHM6Ly9naXRodWIuY29tL3J5dXJrby9uZmxzY3JhcFItZGF0YS9yYXcvbWFzdGVyL3BsYXlfYnlfcGxheV9kYXRhL3JlZ3VsYXJfc2Vhc29uL3JlZ19wYnBfMjAxOS5jc3YiKSkNCnBicA0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQojUHJvIEZvb3RiYWxsIFJlZmVyZW5jZQ0KSm9nYWRvcmVzQXZhbGlhZG9zID0gYygxLCAzLCAxNCwgOCwgMTcsIDcsIDE4LCA5LCA0LCAxMiwgMzIsIDE5LCAyNiwgNDQsIDYsIDUsIDE1LCAyNCwgMjUsIDIyLCAxNiwgMTAsIDM0LCAyNywgMjMsIDM3LCAzOSwgMTEsIDQwLCAyMCwgNjgsIDMzLCA1MiwgMjksIDQ2LCA0MywgNDgsIDc1LCAyOCwgNTgsIDMwLCAxMywgNDEsIDM2LCA0NykNCg0KUEZSIDwtIHJlYWQuY3N2KCJQRlIuY3N2Iiwgc2VwPSI7IikgJT4lDQogICBmaWx0ZXIoUmsgJWluJSBKb2dhZG9yZXNBdmFsaWFkb3MpDQoNClBGUltQRlIkVG0gPT0gIkdOQiIsXSRUbSA8LSAiR0IiDQpQRlJbUEZSJFRtID09ICJOV0UiLF0kVG0gPC0gIk5FIg0KUEZSW1BGUiRUbSA9PSAiMlRNIixdJFRtIDwtICJBUkkiDQpQRlJbUEZSJFRtID09ICJTRk8iLF0kVG0gPC0gIlNGIg0KUEZSW1BGUiRUbSA9PSAiTk9SIixdJFRtIDwtICJOTyINClBGUltQRlIkVG0gPT0gIlRBTSIsXSRUbSA8LSAiVEIiDQpQRlJbUEZSJFRtID09ICJLQU4iLF0kVG0gPC0gIktDIg0KDQpQRlIkQnJrVGtsIDwtIFBGUiRCcmtUa2wgLyBQRlIkQXR0DQpQRlINCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KI05leHQgR2VuIFN0YXRzDQpKb2dhZG9yZXNBdmFsaWFkb3MyID0gYygiTWlsZXMgU2FuZGVycyIsICJDaHJpcyBDYXJzb24iLCAiRXpla2llbCBFbGxpb3R0IiwgIkNocmlzdGlhbiBNY0NhZmZyZXkiLCAiTWFyayBJbmdyYW0iLCAiQWFyb24gSm9uZXMiLCAiS2VueWFuIERyYWtlIiwgIkRlcnJpY2sgSGVucnkiLCAiUmFoZWVtIE1vc3RlcnQiLCAiRGFsdmluIENvb2siLCAiTmljayBDaHViYiIsICJHdXMgRWR3YXJkcyIsICJKb3NoIEphY29icyIsICJMYXRhdml1cyBNdXJyYXkiLCAiSm9yZGFuIEhvd2FyZCIsICJNYXJsb24gTWFjayIsICJQaGlsbGlwIExpbmRzYXkiLCAiSm9lIE1peG9uIiwgIlNhcXVvbiBCYXJrbGV5IiwgIkFsdmluIEthbWFyYSIsICJEZXZpbiBTaW5nbGV0YXJ5IiwgIlRvZGQgR3VybGV5IiwgIkNhcmxvcyBIeWRlIiwgIlJvbmFsZCBKb25lcyIsICJBZHJpYW4gUGV0ZXJzb24iLCAiTWF0dCBCcmVpZGEiLCAiSmFtYWFsIFdpbGxpYW1zIiwgIkFsZXhhbmRlciBNYXR0aXNvbiIsICJTb255IE1pY2hlbCIsICJMZVNlYW4gTWNDb3kiLCAiRGFtaWVuIFdpbGxpYW1zIiwgIk1lbHZpbiBHb3Jkb24iLCAiRGVBbmRyZSBXYXNoaW5ndG9uIiwgIkxlb25hcmQgRm91cm5ldHRlIiwgIkF1c3RpbiBFa2VsZXIiLCAiUm95Y2UgRnJlZW1hbiIsICJKYW1lcyBDb25uZXIiLCAiQmVubnkgU25lbGwiLCAiRGV2b250YSBGcmVlbWFuIiwgIktlcnJ5b24gSm9obnNvbiIsICJUZXZpbiBDb2xlbWFuIiwgIkRhdmlkIE1vbnRnb21lcnkiLCAiRnJhbmsgR29yZSIsICJMZSdWZW9uIEJlbGwiLCAiUGV5dG9uIEJhcmJlciIpDQoNCk5leHRHZW5TdGF0cyA8LSByZWFkLmNzdigiTkdTLmNzdiIsIHNlcD0iOyIpICU+JQ0KICAgICAgICAgICAgICAgIGZpbHRlcihQTEFZRVIuTkFNRSAlaW4lIEpvZ2Fkb3Jlc0F2YWxpYWRvczIpDQogIA0KTmV4dEdlblN0YXRzW05leHRHZW5TdGF0cyRURUFNID09ICJMViIsXSRURUFNIDwtICJPQUsiDQpOZXh0R2VuU3RhdHMNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQojRm9vdGJhbGwgT3V0c2lkZXJzDQpGb290YmFsbE91dHNpZGVycyA8LSByZWFkLmNzdigiRk8uY3N2Iiwgc2VwPSI7IikgICU+JSBuYS5leGNsdWRlDQoNCkZvb3RiYWxsT3V0c2lkZXJzWzUsMl0gPC0gIkFSSSINCkZvb3RiYWxsT3V0c2lkZXJzDQpgYGANCg0KDQpgYGB7cn0NCg0KI0RpdmlkaXIgYSBiYXNlIGRvIG5mbHNjcmFwUiBlbnRyZSBDb3JyaWRhcyBlIFBhc3Nlcw0KDQpjb3JyaWRhcyA8LSBwYnAgJT4lIGZpbHRlcihydXNoX2F0dGVtcHQ9PTEsIHBsYXlfdHlwZT09InJ1biIpICU+JSBzZWxlY3QoZGVzYywgcnVzaF9hdHRlbXB0LCB5YXJkc19nYWluZWQsIHJ1c2hlcl9wbGF5ZXJfbmFtZSwgcnVzaF90b3VjaGRvd24sIGVwYSwgcG9zdGVhbSwgdGRfcHJvYiwgcnVzaGVyX3BsYXllcl9pZCkgJT4lDQogZmlsdGVyKChydXNoZXJfcGxheWVyX25hbWUgJWluJSBGb290YmFsT3V0c2lkZXJzJFBsYXllciksIA0KICAgICAgICAhKChydXNoZXJfcGxheWVyX25hbWUgJWluJSBjKCJLLkRyYWtlIikpICYgKHBvc3RlYW0gPT0gIk1JQSIpKSwNCiAgICAgICAgISgocnVzaGVyX3BsYXllcl9uYW1lICVpbiUgYygiSy5Kb2huc29uIikpICYgKHBvc3RlYW0gPT0gIkFSSSIpKSwNCiAgICAgICAgISgocnVzaGVyX3BsYXllcl9uYW1lICVpbiUgYygiSi5XaWxsaWFtcyIpKSAmIChwb3N0ZWFtID09ICJJTkQiKSksDQogICAgICAgICEoKHJ1c2hlcl9wbGF5ZXJfbmFtZSAlaW4lIGMoIkQuV2FzaGluZ3RvbiIpKSAmIChwb3N0ZWFtID09ICJOTyIpKSkNCg0KcGFzc2VzIDwtIHBicCAlPiUgZmlsdGVyKHBhc3NfYXR0ZW1wdD09MSwgcGxheV90eXBlPT0icGFzcyIpICU+JSBzZWxlY3QoZGVzYywgcGFzc19hdHRlbXB0LCB5YXJkc19nYWluZWQsIHJlY2VpdmVyX3BsYXllcl9uYW1lLCBlcGEsIHlhY19lcGEsIHBvc3RlYW0sIHJlY2VpdmVyX3BsYXllcl9pZCkgICU+JQ0KZmlsdGVyKChyZWNlaXZlcl9wbGF5ZXJfbmFtZSAlaW4lIEZvb3RiYWxPdXRzaWRlcnMkUGxheWVyKSwgDQogICAgICAgICEoKHJlY2VpdmVyX3BsYXllcl9uYW1lICVpbiUgYygiSy5EcmFrZSIpKSAmIChwb3N0ZWFtID09ICJNSUEiKSksDQogICAgICAgICEoKHJlY2VpdmVyX3BsYXllcl9uYW1lICVpbiUgYygiSy5Kb2huc29uIikpICYgKHBvc3RlYW0gPT0gIkFSSSIpKSwNCiAgICAgICAgISgocmVjZWl2ZXJfcGxheWVyX25hbWUgJWluJSBjKCJKLldpbGxpYW1zIikpICYgKHBvc3RlYW0gPT0gIklORCIpKSwNCiAgICAgICAgISgocmVjZWl2ZXJfcGxheWVyX25hbWUgJWluJSBjKCJELldhc2hpbmd0b24iKSkgJiAocG9zdGVhbSA9PSAiTk8iKSkpDQpgYGANCg0KDQoNCg0KYGBge3J9DQoNCiNDcmlhciByYW5raW5nIGRlIGpvZ2Fkb3JlcyBuYXMgZXN0YXTDrXN0aWNhcyByZXRpcmFkYXMgZG8gbmZsc2NyYXBSDQoNCiNFcGEgVGVycmVzdHJlIHBvciB0ZW50YXRpdmENCnJhbmtfRVBBX1RfYXR0ZW1wdCA8LSBjb3JyaWRhcyAlPiUNCiBncm91cF9ieShydXNoZXJfcGxheWVyX2lkKSAlPiUNCiBtdXRhdGUoRXBhVGVycmVzdHJlX3BhID0gbWVhbihlcGEsIG5hLnJtID0gVFJVRSksIFRpbWUgPSBwb3N0ZWFtLCBDb3JyaWRhcz1uKCkpICU+JQ0KIHNlbGVjdCAoVGltZSwgcnVzaGVyX3BsYXllcl9uYW1lLCBFcGFUZXJyZXN0cmVfcGEsIENvcnJpZGFzKSAlPiUgZGlzdGluY3QgJT4lDQogYXJyYW5nZShkZXNjKEVwYVRlcnJlc3RyZV9wYSksICBuYS5ybSA9IFRSVUUpDQpyYW5rX0VQQV9UX2F0dGVtcHQNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQojRXBhIFRlcnJlc3RyZSAiTG9uZ28iIHBvciB0ZW50YXRpdmENCmNvcnJpZGFzTWFpc0RlOCA8LSBjb3JyaWRhcyAlPiUgZmlsdGVyKHlhcmRzX2dhaW5lZCA+PSA5KQ0KDQpyYW5rX0VQQV9UX2xvbmdvX2F0dGVtcHQgPC0gY29ycmlkYXNNYWlzRGU4ICU+JQ0KICBncm91cF9ieShydXNoZXJfcGxheWVyX2lkKSAlPiUNCiAgbXV0YXRlKEVwYVRlcnJlc3RyZUxvbmdvX3BhID0gbWVhbihlcGEsIG5hLnJtID0gVFJVRSksIFRvdGFsRXBhID0gc3VtKGVwYSwgbmEucm0gPSBUUlVFKSwgVGltZSA9IHBvc3RlYW0sIFREcyA9IHN1bShydXNoX3RvdWNoZG93biksICJKYXJkYXMgUG9yIENhcnJlZ2FkYSI9bWVhbih5YXJkc19nYWluZWQpLCBDb3JyaWRhcz1uKCkpICU+JQ0KICBzZWxlY3QgKFRpbWUsIHJ1c2hlcl9wbGF5ZXJfbmFtZSwgRXBhVGVycmVzdHJlTG9uZ29fcGEsIFRvdGFsRXBhLCBDb3JyaWRhcywgIFREcykgJT4lIGRpc3RpbmN0ICU+JQ0KICBhcnJhbmdlKGRlc2MoRXBhVGVycmVzdHJlTG9uZ29fcGEpLCAgbmEucm0gPSBUUlVFKQ0KDQpyYW5rX0VQQV9UX2xvbmdvX2F0dGVtcHQNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiNPcGVuIEZpZWxkIFJhdGlvDQpjb3JyaWRhcyA8LSBjb3JyaWRhcyAlPiUNCiAgbXV0YXRlKA0KICAgIENMID0gaWZfZWxzZSh5YXJkc19nYWluZWQgPj0gOSwgMSAsIDApLCAjY2x1dGNoIGxpbmUNCiAgICBCUFMgPSBpZl9lbHNlKHlhcmRzX2dhaW5lZCA+PSAyMCB8ICh5YXJkc19nYWluZWQgPj0gOSAmIHJ1c2hfdG91Y2hkb3duID09IDEpLCAxLCAwKSAjc3VjZXNzbyBuYSBiaWcgcGxheQ0KICApDQoNCnJhbmtfT0ZSICA8LSBjb3JyaWRhcyAlPiUNCiBmaWx0ZXIoeWFyZHNfZ2FpbmVkID49IDkpICU+JQ0KIGdyb3VwX2J5KHJ1c2hlcl9wbGF5ZXJfaWQpICU+JQ0KIG11dGF0ZShUaW1lID0gcG9zdGVhbSwgQ29ycmlkYXM9bigpLCBPcGVuRmllbGRSYXRpbyA9IHN1bShCUFMpIC8gc3VtKENMKSwgVG90YWxCUFMgPSBzdW0oQlBTKSwgVG90YWxDTCA9IHN1bShDTCkpICU+JQ0KIHNlbGVjdCAoVGltZSwgcnVzaGVyX3BsYXllcl9uYW1lLCBPcGVuRmllbGRSYXRpbywgVG90YWxCUFMsIFRvdGFsQ0wsIENvcnJpZGFzKSAlPiUgZGlzdGluY3QgJT4lDQogYXJyYW5nZShkZXNjKE9wZW5GaWVsZFJhdGlvKSwgIG5hLnJtID0gVFJVRSkNCnJhbmtfT0ZSDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiNFUEEgQWVyZW8gKHJlY2Vww6fDtWVzKQ0KcmFua19lcGFfYWVyZW8gPC0gcGFzc2VzICU+JSAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwX2J5KHJlY2VpdmVyX3BsYXllcl9pZCkgJT4lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShUaW1lID0gcG9zdGVhbSwgc25hcHNfcGFzc2VzPW4oKSwgZXBhQWVyZW9NZWRpbyA9IG1lYW4oZXBhLCBuYS5ybSA9IFRSVUUpLCB5YWNfZXBhQWVyZW9NZWRpbyA9IG1lYW4oeWFjX2VwYSwgbmEucm0gPSBUUlVFKSkgJT4lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdChyZWNlaXZlcl9wbGF5ZXJfbmFtZSwgVGltZSwgZXBhQWVyZW9NZWRpbywgeWFjX2VwYUFlcmVvTWVkaW8sIHNuYXBzX3Bhc3NlcykgJT4lIGRpc3RpbmN0ICU+JQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJhbmdlKGRlc2MoZXBhQWVyZW9NZWRpbyksICBuYS5ybSA9IFRSVUUpDQpyYW5rX2VwYV9hZXJlbw0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiNFcGEgWWFyZHMgQWZ0ZXIgQ2F0Y2gNCnJhbmtfeWFjX2VwYV9hZXJlbyA8LSByYW5rX2VwYV9hZXJlbyAlPiUNCiAgICAgICAgICAgICAgICAgICAgICBhcnJhbmdlKGRlc2MoeWFjX2VwYUFlcmVvTWVkaW8pKQ0KcmFua195YWNfZXBhX2FlcmVvDQpgYGANCg0KYGBge3J9DQojQ3JpYXIgcmFua2luZyBkZSBqb2dhZG9yZXMgbmFzIGVzdGF0w61zdGljYXMgcmV0aXJhZGFzIGRvIFBybyBGb290YmFsbCBSZWZlcmVuY2UNCg0KIyJZYXJkcyBCZWZvcmUgQ29udGFjdCIgcG9yIHRlbnRhdGl2YQ0KcmFua19ZYXJkc0JlZm9yZUNvbnRhY3QgPC0gUEZSICU+JQ0KICAgICAgICAgICAgICAgICAgICAgIGFycmFuZ2UoZGVzYyhZQkMuQXR0KSkgJT4lDQogICAgICAgICAgICAgICAgICAgICAgc2VsZWN0KFBsYXllciwgVG0sIFBvcywgWUJDLkF0dCwgWUFDLkF0dCwgQnJrVGtsKQ0KcmFua19ZYXJkc0JlZm9yZUNvbnRhY3QNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiMiWWFyZHMgQWZ0ZXIgQ29udGFjdCIgcG9yIHRlbnRhdGl2YQ0KcmFua19ZYXJkc0FmdGVyQ29udGFjdCA8LSBQRlIgJT4lDQogICAgICAgICAgICAgICAgICAgICAgYXJyYW5nZShkZXNjKFlBQy5BdHQpKSAlPiUNCiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QoUGxheWVyLCBUbSwgUG9zLCBZQkMuQXR0LCBZQUMuQXR0LCBCcmtUa2wsIEF0dCkgJT4lIG5hLmV4Y2x1ZGUNCnJhbmtfWWFyZHNBZnRlckNvbnRhY3QNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KI0Jyb2tlbiBUYWNrbGVzDQpyYW5rX0Jyb2tlblRhY2tsZXMgPC0gUEZSICU+JQ0KICAgICAgICAgICAgICAgICAgICAgIGFycmFuZ2UoZGVzYyhCcmtUa2wpKSAlPiUNCiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QoUGxheWVyLCBUbSwgUG9zLCBZQkMuQXR0LCBZQUMuQXR0LCBCcmtUa2wpDQpyYW5rX0Jyb2tlblRhY2tsZXMNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmBgYA0KDQoNCg0KYGBge3J9DQojQ3JpYXIgcmFua2luZyBkZSBqb2dhZG9yZXMgbmFzIGVzdGF0w61zdGljYXMgcmV0aXJhZGFzIGRvIE5leHQgR2VuIFN0YXRzDQoNCnJhbmtfOG1hbmJveCA8LSBOZXh0R2VuU3RhdHMgJT4lDQogICAgICAgICAgICAgICAgICAgICAgYXJyYW5nZShkZXNjKFg4LkQuKSkgJT4lDQogICAgICAgICAgICAgICAgICAgICAgc2VsZWN0KFBMQVlFUi5OQU1FLCBURUFNLCBYOC5ELiwgVExPUywgQVRUKSAlPiUgbmEuZXhjbHVkZQ0KcmFua184bWFuYm94DQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCnJhbmtfVGltZUJlaGluZExPUyA8LSBOZXh0R2VuU3RhdHMgJT4lDQogICAgICAgICAgICAgICAgICAgICAgYXJyYW5nZShkZXNjKFRMT1MpKSAlPiUNCiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QoUExBWUVSLk5BTUUsIFRFQU0sIFg4LkQuLCBUTE9TLCBBVFQpDQpyYW5rX1RpbWVCZWhpbmRMT1MNCmBgYA0KYGBge3J9DQoNCiNDcmlhciByYW5raW5nIGRlIGpvZ2Fkb3JlcyBuYXMgZXN0YXTDrXN0aWNhcyByZXRpcmFkYXMgZG8gRm9vdGJhbGwgT3V0c2lkZXJzDQpyYW5rX0RWT0EgPC0gRm9vdGJhbGxPdXRzaWRlcnMgJT4lDQogICAgICAgICAgICAgICAgICAgICAgYXJyYW5nZShSay4yKSAlPiUNCiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QoUGxheWVyLCBUZWFtLCBEVk9BLCBEWUFSLi4gLCBTdWNjLi5SYXRlKQ0KcmFua19EVk9BDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KcmFua19EWUFSIDwtIEZvb3RiYWxsT3V0c2lkZXJzICU+JQ0KICAgICAgICAgICAgICAgICAgICAgIGFycmFuZ2UoUmspICU+JQ0KICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdChQbGF5ZXIsIFRlYW0sIERWT0EsIERZQVIuLiAsIFN1Y2MuLlJhdGUpDQpyYW5rX0RZQVINCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQpyYW5rX1N1Y2Nlc3NSYXRlIDwtIEZvb3RiYWxsT3V0c2lkZXJzICU+JQ0KICAgICAgICAgICAgICAgICAgICAgIGFycmFuZ2UoU3VjYy4uUmF0ZSkgJT4lDQogICAgICAgICAgICAgICAgICAgICAgc2VsZWN0KFBsYXllciwgVGVhbSwgRFZPQSwgRFlBUi4uICwgU3VjYy4uUmF0ZSkNCnJhbmtfU3VjY2Vzc1JhdGUNCmBgYA0KDQpgYGB7cn0NCiNDcmlhciBhcyBlc3RhdMOtc3RpY2FzIGRvcyBhdGFxdWVzDQoNCnJhbmtfdGltZXMgPC0gcGJwICU+JQ0KICBncm91cF9ieShwb3N0ZWFtKSAlPiUNCiAgbXV0YXRlKA0KICAgIEVwYU1lZGlvID0gIG1lYW4oZXBhLCBuYS5ybSA9IFRSVUUpLCANCiAgICANCiAgICBGaXJzdERvd25zID0gc3VtKGlmX2Vsc2UoZG93biA9PSAxLCAxLCAwKSwgbmEucm0gPSBUUlVFKSwNCiAgICBTZWNvbmREb3ducyA9IHN1bShpZl9lbHNlKGRvd24gPT0gMiwgMSwgMCksIG5hLnJtID0gVFJVRSksDQogICAgVGhpcmREb3ducyA9IHN1bShpZl9lbHNlKGRvd24gPT0gMywgMSwgMCksIG5hLnJtID0gVFJVRSksDQogICAgRm91cnRoRG93bnMgPSBzdW0oaWZfZWxzZShkb3duID09IDQsIDEsIDApLCBuYS5ybSA9IFRSVUUpLA0KICAgIA0KICAgIEZpcnN0X2Rvd25zX2NvbnZlcnRlZCA9IHN1bShpZl9lbHNlKChkb3duID09IDEgJiB5YXJkc19nYWluZWQgPj0geWRzdG9nbykgfCAoZG93biA9PSAxICYgcGVuYWx0eV90ZWFtID09IGRlZnRlYW0pLCAxLCAwKSwgbmEucm0gPSBUUlVFKSwNCiAgICBTZWNvbmRfZG93bnNfY29udmVydGVkID0gc3VtKGlmX2Vsc2UoKGRvd24gPT0gMiAmIHlhcmRzX2dhaW5lZCA+PSB5ZHN0b2dvKSB8IChkb3duID09IDIgJiBwZW5hbHR5X3RlYW0gPT0gZGVmdGVhbSksIDEsIDApLCBuYS5ybSA9IFRSVUUpLA0KICAgIFRoaXJkX2Rvd25zX2NvbnZlcnRlZCA9IHN1bShpZl9lbHNlKChkb3duID09IDMgJiB5YXJkc19nYWluZWQgPj0geWRzdG9nbykgfCAoZG93biA9PSAzICYgcGVuYWx0eV90ZWFtID09IGRlZnRlYW0pLCAxLCAwKSwgbmEucm0gPSBUUlVFKSwNCiAgICBGb3VydGhfZG93bnNfY29udmVydGVkID0gc3VtKGlmX2Vsc2UoKGRvd24gPT0gNCAmIHlhcmRzX2dhaW5lZCA+PSB5ZHN0b2dvKSB8IChkb3duID09IDQgJiBwZW5hbHR5X3RlYW0gPT0gZGVmdGVhbSksIDEsIDApLCBuYS5ybSA9IFRSVUUpLA0KICAgDQogICAgRmlyc3RfZG93bl9jb252X3BjdCA9IEZpcnN0X2Rvd25zX2NvbnZlcnRlZCAvIEZpcnN0RG93bnMsDQogICAgU2Vjb25kX2Rvd25fY29udl9wY3QgPSBTZWNvbmRfZG93bnNfY29udmVydGVkIC8gU2Vjb25kRG93bnMsDQogICAgVGhpcmRfZG93bl9jb252X3BjdCA9IFRoaXJkX2Rvd25zX2NvbnZlcnRlZCAvIFRoaXJkRG93bnMsDQogICAgRm91cnRoX2Rvd25fY29udl9wY3QgPSBGb3VydGhfZG93bnNfY29udmVydGVkIC8gRm91cnRoRG93bnMNCiAgICAgICkgJT4lDQogIHNlbGVjdChwb3N0ZWFtLCBFcGFNZWRpbywgRmlyc3RfZG93bl9jb252X3BjdCwgU2Vjb25kX2Rvd25fY29udl9wY3QsIFRoaXJkX2Rvd25fY29udl9wY3QsIEZvdXJ0aF9kb3duX2NvbnZfcGN0KSAlPiUgZGlzdGluY3QgJT4lDQogIGFycmFuZ2UoZGVzYyhFcGFNZWRpbyksIG5hLnJtID0gVFJVRSkgJT4lIG5hLmV4Y2x1ZGUgJT4lDQogIGZpbHRlcihwb3N0ZWFtICE9ICJNSUEiKQ0KDQojIyMjIw0KDQpyYW5rX3RpbWVzX2VwYU1lZGlvIDwtIHJhbmtfdGltZXMgJT4lIGFycmFuZ2UoZGVzYyhFcGFNZWRpbykpDQpyYW5rX3RpbWVzX2VwYU1lZGlvJHJhbmsgPC0gTkENCnJhbmtfdGltZXNfZXBhTWVkaW8kcmFuayA8LSAxOm5yb3cocmFua190aW1lc19lcGFNZWRpbykNCnJhbmtfdGltZXNfZXBhTWVkaW8NCg0KcmFua190aW1lc19Gc3RQY3QgPC0gcmFua190aW1lcyAlPiUgYXJyYW5nZShkZXNjKEZpcnN0X2Rvd25fY29udl9wY3QpKQ0KcmFua190aW1lc19Gc3RQY3QkcmFuayA8LSBOQQ0KcmFua190aW1lc19Gc3RQY3QkcmFuayA8LSAxOm5yb3cocmFua190aW1lc19Gc3RQY3QpDQpyYW5rX3RpbWVzX0ZzdFBjdA0KDQpyYW5rX3RpbWVzX1NuZFBjdCA8LSByYW5rX3RpbWVzICU+JSBhcnJhbmdlKGRlc2MoU2Vjb25kX2Rvd25fY29udl9wY3QpKQ0KcmFua190aW1lc19TbmRQY3QkcmFuayA8LSBOQQ0KcmFua190aW1lc19TbmRQY3QkcmFuayA8LSAxOm5yb3cocmFua190aW1lc19TbmRQY3QpDQpyYW5rX3RpbWVzX1NuZFBjdA0KDQpyYW5rX3RpbWVzX1RyZFBjdCA8LSByYW5rX3RpbWVzICU+JSBhcnJhbmdlKGRlc2MoVGhpcmRfZG93bl9jb252X3BjdCkpDQpyYW5rX3RpbWVzX1RyZFBjdCRyYW5rIDwtIE5BDQpyYW5rX3RpbWVzX1RyZFBjdCRyYW5rIDwtIDE6bnJvdyhyYW5rX3RpbWVzX1RyZFBjdCkNCnJhbmtfdGltZXNfVHJkUGN0DQoNCnJhbmtfdGltZXNfRnRoUGN0IDwtIHJhbmtfdGltZXMgJT4lIGFycmFuZ2UoZGVzYyhGb3VydGhfZG93bl9jb252X3BjdCkpDQpyYW5rX3RpbWVzX0Z0aFBjdCRyYW5rIDwtIE5BDQpyYW5rX3RpbWVzX0Z0aFBjdCRyYW5rIDwtIDE6bnJvdyhyYW5rX3RpbWVzX0Z0aFBjdCkNCnJhbmtfdGltZXNfRnRoUGN0DQojcmFua190aW1lc19GdGhQY3QkcmFua1tvcmRlcigtcmFua190aW1lc19GdGhQY3QkRm91cnRoX2Rvd25fY29udl9wY3QpXSA8LSAxOm5yb3cocmFua190aW1lc19GdGhQY3QpDQpgYGANCg0KYGBge3J9DQojT3JnYW5pemFyIHBvciB0aW1lcw0KDQojRVBBIFRlcnJlc3RyZQ0KcmFua190ZWFtc19FUEFfVF9hdHRlbXB0IDwtIHJhbmtfRVBBX1RfYXR0ZW1wdCAlPiUNCiAgbXV0YXRlKA0KICAgIEVwYVZlemVzTnVtQ29ycmlkYXMgPSBFcGFUZXJyZXN0cmVfcGEgKiBDb3JyaWRhcw0KICApICU+JQ0KICBncm91cF9ieShUaW1lKSAlPiUNCiAgbXV0YXRlKA0KICAgIENvcnJpZGFzVGltZSA9IHN1bShDb3JyaWRhcyksDQogICAgRXBhX01lZGlhX1BvbmRlcmFkYSA9IHN1bShFcGFWZXplc051bUNvcnJpZGFzKSAvIENvcnJpZGFzVGltZQ0KICApICU+JQ0KICBzZWxlY3QoVGltZSwgRXBhX01lZGlhX1BvbmRlcmFkYSkgJT4lIGRpc3RpbmN0ICU+JQ0KICBhcnJhbmdlKGRlc2MoRXBhX01lZGlhX1BvbmRlcmFkYSkpDQoNCnJhbmtfdGVhbXNfRVBBX1RfYXR0ZW1wdCRyYW5rIDwtIE5BDQpyYW5rX3RlYW1zX0VQQV9UX2F0dGVtcHQkcmFuayA8LSAxOm5yb3cocmFua190ZWFtc19FUEFfVF9hdHRlbXB0KQ0KcmFua190ZWFtc19FUEFfVF9hdHRlbXB0DQoNCiNFUEEgVGVycmVzdHJlIExvbmdvDQpyYW5rX3RlYW1zX0VQQV9UX2xvbmdvX2F0dGVtcHQgPC0gcmFua19FUEFfVF9sb25nb19hdHRlbXB0ICU+JQ0KICBtdXRhdGUoDQogICAgRXBhVmV6ZXNOdW1Db3JyaWRhcyA9IFRvdGFsRXBhICogQ29ycmlkYXMNCiAgKSAlPiUNCiAgZ3JvdXBfYnkoVGltZSkgJT4lDQogIG11dGF0ZSgNCiAgICBDb3JyaWRhc1RpbWUgPSBzdW0oQ29ycmlkYXMpLA0KICAgIEVwYV9NZWRpYV9Qb25kZXJhZGEgPSBzdW0oRXBhVmV6ZXNOdW1Db3JyaWRhcykgLyBDb3JyaWRhc1RpbWUNCiAgKSAlPiUNCiAgc2VsZWN0KFRpbWUsIEVwYV9NZWRpYV9Qb25kZXJhZGEpICU+JSBkaXN0aW5jdCAlPiUNCiAgYXJyYW5nZShkZXNjKEVwYV9NZWRpYV9Qb25kZXJhZGEpKQ0KDQoNCnJhbmtfdGVhbXNfRVBBX1RfbG9uZ29fYXR0ZW1wdCRyYW5rIDwtIE5BDQpyYW5rX3RlYW1zX0VQQV9UX2xvbmdvX2F0dGVtcHQkcmFuayA8LSAxOm5yb3cocmFua190ZWFtc19FUEFfVF9sb25nb19hdHRlbXB0KQ0KcmFua190ZWFtc19FUEFfVF9sb25nb19hdHRlbXB0DQoNCiNPRlINCnJhbmtfdGVhbXNfT0ZSIDwtIHJhbmtfT0ZSICU+JQ0KICBtdXRhdGUoDQogICAgT0ZSVmV6ZXNOdW1Db3JyaWRhcyA9IE9wZW5GaWVsZFJhdGlvICogQ29ycmlkYXMNCiAgKSAlPiUNCiAgZ3JvdXBfYnkoVGltZSkgJT4lDQogIG11dGF0ZSgNCiAgICBDb3JyaWRhc1RpbWUgPSBzdW0oQ29ycmlkYXMpLA0KICAgIE9GUl9NZWRpYV9Qb25kZXJhZGEgPSBzdW0oT0ZSVmV6ZXNOdW1Db3JyaWRhcykgLyBDb3JyaWRhc1RpbWUNCiAgKSAlPiUNCiAgc2VsZWN0KFRpbWUsIE9GUl9NZWRpYV9Qb25kZXJhZGEpICU+JSBkaXN0aW5jdCAlPiUNCiAgYXJyYW5nZShkZXNjKE9GUl9NZWRpYV9Qb25kZXJhZGEpKQ0KDQoNCnJhbmtfdGVhbXNfT0ZSJHJhbmsgPC0gTkENCnJhbmtfdGVhbXNfT0ZSJHJhbmsgPC0gMTpucm93KHJhbmtfdGVhbXNfT0ZSKQ0KcmFua190ZWFtc19PRlINCg0KI0VQQSBBw6lyZW8NCnJhbmtfdGVhbXNfZXBhX2FlcmVvIDwtIHJhbmtfZXBhX2FlcmVvICU+JQ0KICBtdXRhdGUoDQogICAgRVBBYWVyZW9WZXplc051bVJlYyA9IGVwYUFlcmVvTWVkaW8gKiBzbmFwc19wYXNzZXMNCiAgKSAlPiUNCiAgZ3JvdXBfYnkoVGltZSkgJT4lDQogIG11dGF0ZSgNCiAgICBSZWNUaW1lID0gc3VtKHNuYXBzX3Bhc3NlcyksDQogICAgRVBBQWVyZW9fTWVkaWFfUG9uZGVyYWRhID0gc3VtKEVQQWFlcmVvVmV6ZXNOdW1SZWMpIC8gUmVjVGltZQ0KICApICU+JQ0KICBzZWxlY3QoVGltZSwgRVBBQWVyZW9fTWVkaWFfUG9uZGVyYWRhKSAlPiUgZGlzdGluY3QgJT4lDQogIGFycmFuZ2UoZGVzYyhFUEFBZXJlb19NZWRpYV9Qb25kZXJhZGEpKQ0KDQoNCnJhbmtfdGVhbXNfZXBhX2FlcmVvJHJhbmsgPC0gTkENCnJhbmtfdGVhbXNfZXBhX2FlcmVvJHJhbmsgPC0gMTpucm93KHJhbmtfdGVhbXNfZXBhX2FlcmVvKQ0KcmFua190ZWFtc19lcGFfYWVyZW8NCg0KI0VQQSBZYXJkcyBBZnRlciBDYXRjaA0KcmFua190ZWFtc19lcGF5YWMgPC0gcmFua19lcGFfYWVyZW8gJT4lDQogIG11dGF0ZSgNCiAgICBFUEFZQUNWZXplc051bVJlYyA9IHlhY19lcGFBZXJlb01lZGlvICogc25hcHNfcGFzc2VzDQogICkgJT4lDQogIGdyb3VwX2J5KFRpbWUpICU+JQ0KICBtdXRhdGUoDQogICAgUmVjVGltZSA9IHN1bShzbmFwc19wYXNzZXMpLA0KICAgIEVQQVlBQ19NZWRpYV9Qb25kZXJhZGEgPSBzdW0oeWFjX2VwYUFlcmVvTWVkaW8pIC8gUmVjVGltZQ0KICApICU+JQ0KICBzZWxlY3QoVGltZSwgRVBBWUFDX01lZGlhX1BvbmRlcmFkYSkgJT4lIGRpc3RpbmN0ICU+JQ0KICBhcnJhbmdlKGRlc2MoRVBBWUFDX01lZGlhX1BvbmRlcmFkYSkpDQoNCnJhbmtfdGVhbXNfZXBheWFjJHJhbmsgPC0gTkENCnJhbmtfdGVhbXNfZXBheWFjJHJhbmsgPC0gMTpucm93KHJhbmtfdGVhbXNfZXBheWFjKQ0KcmFua190ZWFtc19lcGF5YWMNCg0KI1lhcmRzIEJlZm9yZSBDb250YWN0L0F0dGVtcHQNCnJhbmtfdGVhbXNfWWFyZHNCZWZvcmVDb250YWN0IDwtIHJhbmtfWWFyZHNBZnRlckNvbnRhY3QgJT4lDQogIG11dGF0ZSgNCiAgICBZYXJkc0JlZm9yZUNvbnRhY3RWZXplc0F0dGVtcHQgPSBZQkMuQXR0ICogQXR0DQogICkgJT4lDQogIGdyb3VwX2J5KFRtKSAlPiUNCiAgbXV0YXRlKA0KICAgIENvcnJpZGFzVGltZSA9IHN1bShBdHQpLA0KICAgIFlCQ19NZWRpYV9Qb25kZXJhZGEgPSBzdW0oWWFyZHNCZWZvcmVDb250YWN0VmV6ZXNBdHRlbXB0KSAvIENvcnJpZGFzVGltZQ0KICApICU+JQ0KICBzZWxlY3QoVG0sIFlCQ19NZWRpYV9Qb25kZXJhZGEpICU+JSBkaXN0aW5jdCAlPiUNCiAgYXJyYW5nZShkZXNjKFlCQ19NZWRpYV9Qb25kZXJhZGEpKQ0KDQpyYW5rX3RlYW1zX1lhcmRzQmVmb3JlQ29udGFjdCRyYW5rIDwtIE5BDQpyYW5rX3RlYW1zX1lhcmRzQmVmb3JlQ29udGFjdCRyYW5rIDwtIDE6bnJvdyhyYW5rX3RlYW1zX1lhcmRzQmVmb3JlQ29udGFjdCkNCnJhbmtfdGVhbXNfWWFyZHNCZWZvcmVDb250YWN0DQoNCiNZYXJkcyBBZnRlciBDb250YWN0L0F0dGVtcHQNCnJhbmtfdGVhbXNfWWFyZHNBZnRlckNvbnRhY3QgPC0gcmFua19ZYXJkc0FmdGVyQ29udGFjdCAlPiUNCiAgbXV0YXRlKA0KICAgIFlhcmRzQWZ0ZXJDb250YWN0VmV6ZXNBdHRlbXB0ID0gWUFDLkF0dCAqIEF0dA0KICApICU+JQ0KICBncm91cF9ieShUbSkgJT4lDQogIG11dGF0ZSgNCiAgICBDb3JyaWRhc1RpbWUgPSBzdW0oQXR0KSwNCiAgICBZQUNfTWVkaWFfUG9uZGVyYWRhID0gc3VtKFlhcmRzQWZ0ZXJDb250YWN0VmV6ZXNBdHRlbXB0KSAvIENvcnJpZGFzVGltZQ0KICApICU+JQ0KICBzZWxlY3QoVG0sIFlBQ19NZWRpYV9Qb25kZXJhZGEpICU+JSBkaXN0aW5jdCAlPiUNCiAgYXJyYW5nZShkZXNjKFlBQ19NZWRpYV9Qb25kZXJhZGEpKQ0KDQpyYW5rX3RlYW1zX1lhcmRzQWZ0ZXJDb250YWN0JHJhbmsgPC0gTkENCnJhbmtfdGVhbXNfWWFyZHNBZnRlckNvbnRhY3QkcmFuayA8LSAxOm5yb3cocmFua190ZWFtc19ZYXJkc0FmdGVyQ29udGFjdCkNCnJhbmtfdGVhbXNfWWFyZHNBZnRlckNvbnRhY3QNCg0KI0Jyb2tlbiBUYWNrbGVzDQpyYW5rX3RlYW1zX0Jyb2tlblRhY2tsZXMgPC0gcmFua19ZYXJkc0FmdGVyQ29udGFjdCAlPiUNCiAgbXV0YXRlKA0KICAgIEJyb2tlblRhY2tsZXNWZXplc0F0dGVtcHQgPSBCcmtUa2wgKiBBdHQNCiAgKSAlPiUNCiAgZ3JvdXBfYnkoVG0pICU+JQ0KICBtdXRhdGUoDQogICAgQ29ycmlkYXNUaW1lID0gc3VtKEF0dCksDQogICAgQnJrVGtsX01lZGlhX1BvbmRlcmFkYSA9IHN1bShCcm9rZW5UYWNrbGVzVmV6ZXNBdHRlbXB0KSAvIENvcnJpZGFzVGltZQ0KICApICU+JQ0KICBzZWxlY3QoVG0sIEJya1RrbF9NZWRpYV9Qb25kZXJhZGEpICU+JSBkaXN0aW5jdCAlPiUNCiAgYXJyYW5nZShkZXNjKEJya1RrbF9NZWRpYV9Qb25kZXJhZGEpKQ0KDQpyYW5rX3RlYW1zX0Jyb2tlblRhY2tsZXMkcmFuayA8LSBOQQ0KcmFua190ZWFtc19Ccm9rZW5UYWNrbGVzJHJhbmsgPC0gMTpucm93KHJhbmtfdGVhbXNfQnJva2VuVGFja2xlcykNCnJhbmtfdGVhbXNfQnJva2VuVGFja2xlcw0KDQojOG1hbkJveA0KcmFua190ZWFtc184bWFuYm94IDwtIHJhbmtfOG1hbmJveCAlPiUNCiAgbXV0YXRlKA0KICAgIEVpZ2h0TWFuSW5Cb3hWZXplc0F0dGVtcHQgPSBYOC5ELiAqIEFUVA0KICApICU+JQ0KICBncm91cF9ieShURUFNKSAlPiUNCiAgbXV0YXRlKA0KICAgIENvcnJpZGFzVGltZSA9IHN1bShBVFQpLA0KICAgIEVpZ2h0TWFuSW5Cb3hfTWVkaWFfUG9uZGVyYWRhID0gc3VtKEVpZ2h0TWFuSW5Cb3hWZXplc0F0dGVtcHQpIC8gQ29ycmlkYXNUaW1lDQogICkgJT4lDQogIHNlbGVjdChURUFNLCBFaWdodE1hbkluQm94X01lZGlhX1BvbmRlcmFkYSkgJT4lIGRpc3RpbmN0ICU+JQ0KICBhcnJhbmdlKGRlc2MoRWlnaHRNYW5JbkJveF9NZWRpYV9Qb25kZXJhZGEpKQ0KDQpyYW5rX3RlYW1zXzhtYW5ib3gkcmFuayA8LSBOQQ0KcmFua190ZWFtc184bWFuYm94JHJhbmsgPC0gMTpucm93KHJhbmtfdGVhbXNfOG1hbmJveCkNCnJhbmtfdGVhbXNfOG1hbmJveA0KDQojVGltZUJlaGluZExPUw0KcmFua190ZWFtc19UQkxPUyA8LSByYW5rXzhtYW5ib3ggJT4lDQogIG11dGF0ZSgNCiAgICBUaW1lQmVoaW5kTE9TVmV6ZXNBdHRlbXB0ID0gVExPUyAqIEFUVA0KICApICU+JQ0KICBncm91cF9ieShURUFNKSAlPiUNCiAgbXV0YXRlKA0KICAgIENvcnJpZGFzVGltZSA9IHN1bShBVFQpLA0KICAgIFRpbWVCZWhpbmRMT1NfTWVkaWFfUG9uZGVyYWRhID0gc3VtKFRpbWVCZWhpbmRMT1NWZXplc0F0dGVtcHQpIC8gQ29ycmlkYXNUaW1lDQogICkgJT4lDQogIHNlbGVjdChURUFNLCBUaW1lQmVoaW5kTE9TX01lZGlhX1BvbmRlcmFkYSkgJT4lIGRpc3RpbmN0ICU+JQ0KICBhcnJhbmdlKGRlc2MoVGltZUJlaGluZExPU19NZWRpYV9Qb25kZXJhZGEpKQ0KDQpyYW5rX3RlYW1zX1RCTE9TJHJhbmsgPC0gTkENCnJhbmtfdGVhbXNfVEJMT1MkcmFuayA8LSAxOm5yb3cocmFua190ZWFtc19UQkxPUykNCnJhbmtfdGVhbXNfVEJMT1MNCg0KI0RWT0ENCnJhbmtfdGVhbXNfRFZPQSA8LSBGb290YmFsbE91dHNpZGVycyAlPiUNCiAgbXV0YXRlKA0KICAgIERWT0FWZXplc0F0dGVtcHQgPSBEVk9BICogUnVucw0KICApICU+JQ0KICBncm91cF9ieShUZWFtKSAlPiUNCiAgbXV0YXRlKA0KICAgIENvcnJpZGFzVGltZSA9IHN1bShSdW5zKSwNCiAgICBEVk9BX01lZGlhX1BvbmRlcmFkYSA9IHN1bShEVk9BVmV6ZXNBdHRlbXB0KSAvIENvcnJpZGFzVGltZQ0KICApICU+JQ0KICBzZWxlY3QoVGVhbSwgRFZPQV9NZWRpYV9Qb25kZXJhZGEpICU+JSBkaXN0aW5jdCAlPiUNCiAgYXJyYW5nZShkZXNjKERWT0FfTWVkaWFfUG9uZGVyYWRhKSkNCg0KcmFua190ZWFtc19EVk9BJHJhbmsgPC0gTkENCnJhbmtfdGVhbXNfRFZPQSRyYW5rIDwtIDE6bnJvdyhyYW5rX3RlYW1zX0RWT0EpDQpyYW5rX3RlYW1zX0RWT0ENCg0KI0RZQVINCnJhbmtfdGVhbXNfRFlBUiA8LSBGb290YmFsbE91dHNpZGVycyAlPiUNCiAgbXV0YXRlKA0KICAgIERZQVJWZXplc0F0dGVtcHQgPSBEWUFSLi4gKiBSdW5zDQogICkgJT4lDQogIGdyb3VwX2J5KFRlYW0pICU+JQ0KICBtdXRhdGUoDQogICAgQ29ycmlkYXNUaW1lID0gc3VtKFJ1bnMpLA0KICAgIERZQVJfTWVkaWFfUG9uZGVyYWRhID0gc3VtKERZQVJWZXplc0F0dGVtcHQpIC8gQ29ycmlkYXNUaW1lDQogICkgJT4lDQogIHNlbGVjdChUZWFtLCBEWUFSX01lZGlhX1BvbmRlcmFkYSkgJT4lIGRpc3RpbmN0ICU+JQ0KICBhcnJhbmdlKGRlc2MoRFlBUl9NZWRpYV9Qb25kZXJhZGEpKQ0KDQpyYW5rX3RlYW1zX0RZQVIkcmFuayA8LSBOQQ0KcmFua190ZWFtc19EWUFSJHJhbmsgPC0gMTpucm93KHJhbmtfdGVhbXNfRFlBUikNCnJhbmtfdGVhbXNfRFlBUg0KDQojU3VjY2VzcyBSYXRlDQpyYW5rX3RlYW1zX3N1Y3JhdGUgPC0gRm9vdGJhbGxPdXRzaWRlcnMgJT4lDQogIG11dGF0ZSgNCiAgICBTdWNjZXNzUmF0ZVZlemVzQXR0ZW1wdCA9IFN1Y2MuLlJhdGUgKiBSdW5zDQogICkgJT4lDQogIGdyb3VwX2J5KFRlYW0pICU+JQ0KICBtdXRhdGUoDQogICAgQ29ycmlkYXNUaW1lID0gc3VtKFJ1bnMpLA0KICAgIFN1Y2MuUmF0ZV9NZWRpYV9Qb25kZXJhZGEgPSBzdW0oU3VjY2Vzc1JhdGVWZXplc0F0dGVtcHQpIC8gQ29ycmlkYXNUaW1lDQogICkgJT4lDQogIHNlbGVjdChUZWFtLCBTdWNjLlJhdGVfTWVkaWFfUG9uZGVyYWRhKSAlPiUgZGlzdGluY3QgJT4lDQogIGFycmFuZ2UoZGVzYyhTdWNjLlJhdGVfTWVkaWFfUG9uZGVyYWRhKSkNCg0KcmFua190ZWFtc19zdWNyYXRlJHJhbmsgPC0gTkENCnJhbmtfdGVhbXNfc3VjcmF0ZSRyYW5rIDwtIDE6bnJvdyhyYW5rX3RlYW1zX3N1Y3JhdGUpDQpyYW5rX3RlYW1zX3N1Y3JhdGUNCmBgYA0KDQpgYGB7cn0NCiNDb21wYXJhciBzdGF0cyBkb3MgUnVubmluZyBCYWNrcyBjb20gbyBFUEEgTcOpZGlvIEdlcmFsIGRvcyB0aW1lcw0KDQojRXBhIFRlcnJlc3RyZSBwZXIgYXR0bXB0DQphIDwtIHJhbmtfdGVhbXNfRVBBX1RfYXR0ZW1wdCAlPiUgYXJyYW5nZShUaW1lKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19lcGFNZWRpbyAlPiUgYXJyYW5nZShwb3N0ZWFtKQ0KYiRyYW5rDQpwcmludCgiRXBhIFRlcnJlc3RyZSBwZXIgYXR0ZW1wdCB2cyBFcGEgTWVkaW8iKQ0KY29yKGEkcmFuaywgYiRyYW5rLCBtZXRob2QgPSAicGVhcnNvbiIpDQoNCiNFcGEgVGVycmVzdHJlIExvbmdvIHBlciBhdHRtcHQNCmEgPC0gcmFua190ZWFtc19FUEFfVF9sb25nb19hdHRlbXB0ICU+JSBhcnJhbmdlKFRpbWUpDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX2VwYU1lZGlvICU+JSBhcnJhbmdlKHBvc3RlYW0pDQpiJHJhbmsNCnByaW50KCJFcGEgVGVycmVzdHJlIExvbmdvIHBlciBhdHRlbXB0IHZzIEVwYSBNZWRpbyIpDQpjb3IoYSRyYW5rLCBiJHJhbmssIG1ldGhvZCA9ICJwZWFyc29uIikNCg0KI0VwYSBBw6lyZW8NCmEgPC0gcmFua190ZWFtc19lcGFfYWVyZW8gJT4lIGFycmFuZ2UoVGltZSkNCmEkcmFuaw0KDQpiIDwtIHJhbmtfdGltZXNfZXBhTWVkaW8gJT4lIGFycmFuZ2UocG9zdGVhbSkNCmIkcmFuaw0KcHJpbnQoIkVwYSBBw6lyZW8gdnMgRXBhIE1lZGlvIikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQojT0ZSDQphIDwtIHJhbmtfdGVhbXNfT0ZSICU+JSBhcnJhbmdlKFRpbWUpDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX2VwYU1lZGlvICU+JSBhcnJhbmdlKHBvc3RlYW0pDQpiJHJhbmsNCnByaW50KCJPRlIgdnMgRXBhIE1lZGlvIikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQojRXBhIFlhcmRzIEFmdGVyIENhdGNoDQphIDwtIHJhbmtfdGVhbXNfZXBheWFjICU+JSBhcnJhbmdlKFRpbWUpDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX2VwYU1lZGlvICU+JSBhcnJhbmdlKHBvc3RlYW0pDQpiJHJhbmsNCnByaW50KCJFUEEgWWFyZHMgQWZ0ZXIgQ2F0Y2ggdnMgRXBhIE1lZGlvIikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQojWWFyZHMgQmVmb3JlIENvbnRhY3QvQXR0ZW1wdA0KYSA8LSByYW5rX3RlYW1zX1lhcmRzQmVmb3JlQ29udGFjdCAlPiUgYXJyYW5nZShUbSkNCmEkcmFuaw0KDQpiIDwtIHJhbmtfdGltZXNfZXBhTWVkaW8gJT4lIGFycmFuZ2UocG9zdGVhbSkNCmIkcmFuaw0KcHJpbnQoIllhcmRzIEJlZm9yZSBDb250YWN0L0F0dGVtcHQgdnMgRXBhIE1lZGlvIikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQojWWFyZHMgQWZ0ZXIgQ29udGFjdC9BdHRlbXB0DQphIDwtIHJhbmtfdGVhbXNfWWFyZHNBZnRlckNvbnRhY3QgJT4lIGFycmFuZ2UoVG0pDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX2VwYU1lZGlvICU+JSBhcnJhbmdlKHBvc3RlYW0pDQpiJHJhbmsNCnByaW50KCJZYXJkcyBBZnRlciBDb250YWN0L0F0dGVtcHQgdnMgRXBhIE1lZGlvIikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQojQnJva2VuIFRhY2tsZQ0KYSA8LSByYW5rX3RlYW1zX0Jyb2tlblRhY2tsZXMgJT4lIGFycmFuZ2UoVG0pDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX2VwYU1lZGlvICU+JSBhcnJhbmdlKHBvc3RlYW0pDQpiJHJhbmsNCnByaW50KCJCcm9rZW4gVGFja2xlcyB2cyBFcGEgTWVkaW8iKQ0KY29yKGEkcmFuaywgYiRyYW5rLCBtZXRob2QgPSAicGVhcnNvbiIpDQoNCiM4K0QlDQphIDwtIHJhbmtfdGVhbXNfOG1hbmJveCAlPiUgYXJyYW5nZShURUFNKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19lcGFNZWRpbyAlPiUgYXJyYW5nZShwb3N0ZWFtKQ0KYiRyYW5rDQpwcmludCgiOCBtYW4gaW4gdGhlIGJveCBQZXJjZW50YWdlIHZzIEVwYSBNZWRpbyIpDQpjb3IoYSRyYW5rLCBiJHJhbmssIG1ldGhvZCA9ICJwZWFyc29uIikNCg0KI1RpbWUgQmVoaW5kIExPUw0KYSA8LSByYW5rX3RlYW1zX1RCTE9TICU+JSBhcnJhbmdlKFRFQU0pDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX2VwYU1lZGlvICU+JSBhcnJhbmdlKHBvc3RlYW0pDQpiJHJhbmsNCnByaW50KCJUaW1lIEJlaGluZCBMaW5lIE9mIFNjcmltYWdlIHZzIEVwYSBNZWRpbyIpDQpjb3IoYSRyYW5rLCBiJHJhbmssIG1ldGhvZCA9ICJwZWFyc29uIikNCg0KI0RWT0ENCmEgPC0gcmFua190ZWFtc19EVk9BICU+JSBhcnJhbmdlKFRlYW0pDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX2VwYU1lZGlvICU+JSBhcnJhbmdlKHBvc3RlYW0pDQpiJHJhbmsNCnByaW50KCJEVk9BIHZzIEVwYSBNZWRpbyIpDQpjb3IoYSRyYW5rLCBiJHJhbmssIG1ldGhvZCA9ICJwZWFyc29uIikNCg0KI0RZQVINCmEgPC0gcmFua190ZWFtc19EWUFSICU+JSBhcnJhbmdlKFRlYW0pDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX2VwYU1lZGlvICU+JSBhcnJhbmdlKHBvc3RlYW0pDQpiJHJhbmsNCnByaW50KCJEWUFSIHZzIEVwYSBNZWRpbyIpDQpjb3IoYSRyYW5rLCBiJHJhbmssIG1ldGhvZCA9ICJwZWFyc29uIikNCg0KI1N1Y2Nlc3MgUmF0ZQ0KYSA8LSByYW5rX3RlYW1zX3N1Y3JhdGUgJT4lIGFycmFuZ2UoVGVhbSkNCmEkcmFuaw0KDQpiIDwtIHJhbmtfdGltZXNfZXBhTWVkaW8gJT4lIGFycmFuZ2UocG9zdGVhbSkNCmIkcmFuaw0KcHJpbnQoIlN1Y2Nlc3MgUmF0ZSBSdW5uaW5nIEdhbWUgdnMgRXBhIE1lZGlvIikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQpwcmludCgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIikNCiNDb21wYXJhciBzdGF0cyBkb3MgUnVubmluZyBCYWNrcyBjb20gYSB0YXhhIGRlIGNvbnZlcnPDo28gZGUgcHJpbWVpcmFzIGRlc2NpZGFzLg0KDQojRXBhIFRlcnJlc3RyZSBwZXIgYXR0bXB0DQphIDwtIHJhbmtfdGVhbXNfRVBBX1RfYXR0ZW1wdCAlPiUgYXJyYW5nZShUaW1lKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19Gc3RQY3QgJT4lIGFycmFuZ2UocG9zdGVhbSkNCmIkcmFuaw0KcHJpbnQoIkVwYSBUZXJyZXN0cmUgcGVyIGF0dGVtcHQgdnMgMXN0IERvd24gQ252IikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQojRXBhIFRlcnJlc3RyZSBMb25nbyBwZXIgYXR0bXB0DQphIDwtIHJhbmtfdGVhbXNfRVBBX1RfbG9uZ29fYXR0ZW1wdCAlPiUgYXJyYW5nZShUaW1lKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19Gc3RQY3QgJT4lIGFycmFuZ2UocG9zdGVhbSkNCmIkcmFuaw0KcHJpbnQoIkVwYSBUZXJyZXN0cmUgTG9uZ28gcGVyIGF0dGVtcHQgdnMgMXN0IERvd24gQ252IikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQojRXBhIEHDqXJlbw0KYSA8LSByYW5rX3RlYW1zX2VwYV9hZXJlbyAlPiUgYXJyYW5nZShUaW1lKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19Gc3RQY3QgJT4lIGFycmFuZ2UocG9zdGVhbSkNCmIkcmFuaw0KcHJpbnQoIkVwYSBBw6lyZW8gdnMgMXN0IERvd24gQ252IikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQojT0ZSDQphIDwtIHJhbmtfdGVhbXNfT0ZSICU+JSBhcnJhbmdlKFRpbWUpDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX0ZzdFBjdCAlPiUgYXJyYW5nZShwb3N0ZWFtKQ0KYiRyYW5rDQpwcmludCgiT0ZSIHZzIDFzdCBEb3duIENudiIpDQpjb3IoYSRyYW5rLCBiJHJhbmssIG1ldGhvZCA9ICJwZWFyc29uIikNCg0KI0VwYSBZYXJkcyBBZnRlciBDYXRjaA0KYSA8LSByYW5rX3RlYW1zX2VwYXlhYyAlPiUgYXJyYW5nZShUaW1lKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19Gc3RQY3QgJT4lIGFycmFuZ2UocG9zdGVhbSkNCmIkcmFuaw0KcHJpbnQoIkVQQSBZYXJkcyBBZnRlciBDYXRjaCB2cyAxc3QgRG93biBDbnYiKQ0KY29yKGEkcmFuaywgYiRyYW5rLCBtZXRob2QgPSAicGVhcnNvbiIpDQoNCiNZYXJkcyBCZWZvcmUgQ29udGFjdC9BdHRlbXB0DQphIDwtIHJhbmtfdGVhbXNfWWFyZHNCZWZvcmVDb250YWN0ICU+JSBhcnJhbmdlKFRtKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19Gc3RQY3QgJT4lIGFycmFuZ2UocG9zdGVhbSkNCmIkcmFuaw0KcHJpbnQoIllhcmRzIEJlZm9yZSBDb250YWN0L0F0dGVtcHQgdnMgMXN0IERvd24gQ252IikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQojWWFyZHMgQWZ0ZXIgQ29udGFjdC9BdHRlbXB0DQphIDwtIHJhbmtfdGVhbXNfWWFyZHNBZnRlckNvbnRhY3QgJT4lIGFycmFuZ2UoVG0pDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX0ZzdFBjdCAlPiUgYXJyYW5nZShwb3N0ZWFtKQ0KYiRyYW5rDQpwcmludCgiWWFyZHMgQWZ0ZXIgQ29udGFjdC9BdHRlbXB0IHZzIDFzdCBEb3duIENudiIpDQpjb3IoYSRyYW5rLCBiJHJhbmssIG1ldGhvZCA9ICJwZWFyc29uIikNCg0KI0Jyb2tlbiBUYWNrbGUNCmEgPC0gcmFua190ZWFtc19Ccm9rZW5UYWNrbGVzICU+JSBhcnJhbmdlKFRtKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19Gc3RQY3QgJT4lIGFycmFuZ2UocG9zdGVhbSkNCmIkcmFuaw0KcHJpbnQoIkJyb2tlbiBUYWNrbGVzIHZzIDFzdCBEb3duIENudiIpDQpjb3IoYSRyYW5rLCBiJHJhbmssIG1ldGhvZCA9ICJwZWFyc29uIikNCg0KIzgrRCUNCmEgPC0gcmFua190ZWFtc184bWFuYm94ICU+JSBhcnJhbmdlKFRFQU0pDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX0ZzdFBjdCAlPiUgYXJyYW5nZShwb3N0ZWFtKQ0KYiRyYW5rDQpwcmludCgiOCBtYW4gaW4gdGhlIGJveCBQZXJjZW50YWdlIHZzIDFzdCBEb3duIENudiIpDQpjb3IoYSRyYW5rLCBiJHJhbmssIG1ldGhvZCA9ICJwZWFyc29uIikNCg0KI1RpbWUgQmVoaW5kIExPUw0KYSA8LSByYW5rX3RlYW1zX1RCTE9TICU+JSBhcnJhbmdlKFRFQU0pDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX0ZzdFBjdCAlPiUgYXJyYW5nZShwb3N0ZWFtKQ0KYiRyYW5rDQpwcmludCgiVGltZSBCZWhpbmQgTGluZSBPZiBTY3JpbWFnZSB2cyAxc3QgRG93biBDbnYiKQ0KY29yKGEkcmFuaywgYiRyYW5rLCBtZXRob2QgPSAicGVhcnNvbiIpDQoNCiNEVk9BDQphIDwtIHJhbmtfdGVhbXNfRFZPQSAlPiUgYXJyYW5nZShUZWFtKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19Gc3RQY3QgJT4lIGFycmFuZ2UocG9zdGVhbSkNCmIkcmFuaw0KcHJpbnQoIkRWT0EgdnMgMXN0IERvd24gQ252IikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQojRFlBUg0KYSA8LSByYW5rX3RlYW1zX0RZQVIgJT4lIGFycmFuZ2UoVGVhbSkNCmEkcmFuaw0KDQpiIDwtIHJhbmtfdGltZXNfRnN0UGN0ICU+JSBhcnJhbmdlKHBvc3RlYW0pDQpiJHJhbmsNCnByaW50KCJEWUFSIHZzIDFzdCBEb3duIENudiIpDQpjb3IoYSRyYW5rLCBiJHJhbmssIG1ldGhvZCA9ICJwZWFyc29uIikNCg0KI1N1Y2Nlc3MgUmF0ZQ0KYSA8LSByYW5rX3RlYW1zX3N1Y3JhdGUgJT4lIGFycmFuZ2UoVGVhbSkNCmEkcmFuaw0KDQpiIDwtIHJhbmtfdGltZXNfRnN0UGN0ICU+JSBhcnJhbmdlKHBvc3RlYW0pDQpiJHJhbmsNCnByaW50KCJTdWNjZXNzIFJhdGUgUnVubmluZyBHYW1lIHZzIDFzdCBEb3duIENudiIpDQpjb3IoYSRyYW5rLCBiJHJhbmssIG1ldGhvZCA9ICJwZWFyc29uIikNCg0KDQpwcmludCgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIikNCiNDb21wYXJhciBzdGF0cyBkb3MgUnVubmluZyBCYWNrcyBjb20gYSB0YXhhIGRlIGNvbnZlcnPDo28gZGUgc2VndW5kYXMgZGVzY2lkYXMuDQoNCiNFcGEgVGVycmVzdHJlIHBlciBhdHRtcHQNCmEgPC0gcmFua190ZWFtc19FUEFfVF9hdHRlbXB0ICU+JSBhcnJhbmdlKFRpbWUpDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX1NuZFBjdCAlPiUgYXJyYW5nZShwb3N0ZWFtKQ0KYiRyYW5rDQpwcmludCgiRXBhIFRlcnJlc3RyZSBwZXIgYXR0ZW1wdCB2cyAybmQgRG93biBDbnYiKQ0KY29yKGEkcmFuaywgYiRyYW5rLCBtZXRob2QgPSAicGVhcnNvbiIpDQoNCiNFcGEgVGVycmVzdHJlIExvbmdvIHBlciBhdHRtcHQNCmEgPC0gcmFua190ZWFtc19FUEFfVF9sb25nb19hdHRlbXB0ICU+JSBhcnJhbmdlKFRpbWUpDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX1NuZFBjdCAlPiUgYXJyYW5nZShwb3N0ZWFtKQ0KYiRyYW5rDQpwcmludCgiRXBhIFRlcnJlc3RyZSBMb25nbyBwZXIgYXR0ZW1wdCB2cyAybmQgRG93biBDbnYiKQ0KY29yKGEkcmFuaywgYiRyYW5rLCBtZXRob2QgPSAicGVhcnNvbiIpDQoNCiNFcGEgQcOpcmVvDQphIDwtIHJhbmtfdGVhbXNfZXBhX2FlcmVvICU+JSBhcnJhbmdlKFRpbWUpDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX1NuZFBjdCAlPiUgYXJyYW5nZShwb3N0ZWFtKQ0KYiRyYW5rDQpwcmludCgiRXBhIEHDqXJlbyB2cyAybmQgRG93biBDbnYiKQ0KY29yKGEkcmFuaywgYiRyYW5rLCBtZXRob2QgPSAicGVhcnNvbiIpDQoNCiNPRlINCmEgPC0gcmFua190ZWFtc19PRlIgJT4lIGFycmFuZ2UoVGltZSkNCmEkcmFuaw0KDQpiIDwtIHJhbmtfdGltZXNfU25kUGN0ICU+JSBhcnJhbmdlKHBvc3RlYW0pDQpiJHJhbmsNCnByaW50KCJPRlIgdnMgMm5kIERvd24gQ252IikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQojRXBhIFlhcmRzIEFmdGVyIENhdGNoDQphIDwtIHJhbmtfdGVhbXNfZXBheWFjICU+JSBhcnJhbmdlKFRpbWUpDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX1NuZFBjdCAlPiUgYXJyYW5nZShwb3N0ZWFtKQ0KYiRyYW5rDQpwcmludCgiRVBBIFlhcmRzIEFmdGVyIENhdGNoIHZzIDJuZCBEb3duIENudiIpDQpjb3IoYSRyYW5rLCBiJHJhbmssIG1ldGhvZCA9ICJwZWFyc29uIikNCg0KI1lhcmRzIEJlZm9yZSBDb250YWN0L0F0dGVtcHQNCmEgPC0gcmFua190ZWFtc19ZYXJkc0JlZm9yZUNvbnRhY3QgJT4lIGFycmFuZ2UoVG0pDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX1NuZFBjdCAlPiUgYXJyYW5nZShwb3N0ZWFtKQ0KYiRyYW5rDQpwcmludCgiWWFyZHMgQmVmb3JlIENvbnRhY3QvQXR0ZW1wdCB2cyAybmQgRG93biBDbnYiKQ0KY29yKGEkcmFuaywgYiRyYW5rLCBtZXRob2QgPSAicGVhcnNvbiIpDQoNCiNZYXJkcyBBZnRlciBDb250YWN0L0F0dGVtcHQNCmEgPC0gcmFua190ZWFtc19ZYXJkc0FmdGVyQ29udGFjdCAlPiUgYXJyYW5nZShUbSkNCmEkcmFuaw0KDQpiIDwtIHJhbmtfdGltZXNfU25kUGN0ICU+JSBhcnJhbmdlKHBvc3RlYW0pDQpiJHJhbmsNCnByaW50KCJZYXJkcyBBZnRlciBDb250YWN0L0F0dGVtcHQgdnMgMm5kIERvd24gQ252IikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQojQnJva2VuIFRhY2tsZQ0KYSA8LSByYW5rX3RlYW1zX0Jyb2tlblRhY2tsZXMgJT4lIGFycmFuZ2UoVG0pDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX1NuZFBjdCAlPiUgYXJyYW5nZShwb3N0ZWFtKQ0KYiRyYW5rDQpwcmludCgiQnJva2VuIFRhY2tsZXMgdnMgMm5kIERvd24gQ252IikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQojOCtEJQ0KYSA8LSByYW5rX3RlYW1zXzhtYW5ib3ggJT4lIGFycmFuZ2UoVEVBTSkNCmEkcmFuaw0KDQpiIDwtIHJhbmtfdGltZXNfU25kUGN0ICU+JSBhcnJhbmdlKHBvc3RlYW0pDQpiJHJhbmsNCnByaW50KCI4IG1hbiBpbiB0aGUgYm94IFBlcmNlbnRhZ2UgdnMgMm5kIERvd24gQ252IikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQojVGltZSBCZWhpbmQgTE9TDQphIDwtIHJhbmtfdGVhbXNfVEJMT1MgJT4lIGFycmFuZ2UoVEVBTSkNCmEkcmFuaw0KDQpiIDwtIHJhbmtfdGltZXNfU25kUGN0ICU+JSBhcnJhbmdlKHBvc3RlYW0pDQpiJHJhbmsNCnByaW50KCJUaW1lIEJlaGluZCBMaW5lIE9mIFNjcmltYWdlIHZzIDJuZCBEb3duIENudiIpDQpjb3IoYSRyYW5rLCBiJHJhbmssIG1ldGhvZCA9ICJwZWFyc29uIikNCg0KI0RWT0ENCmEgPC0gcmFua190ZWFtc19EVk9BICU+JSBhcnJhbmdlKFRlYW0pDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX1NuZFBjdCAlPiUgYXJyYW5nZShwb3N0ZWFtKQ0KYiRyYW5rDQpwcmludCgiRFZPQSB2cyAybmQgRG93biBDbnYiKQ0KY29yKGEkcmFuaywgYiRyYW5rLCBtZXRob2QgPSAicGVhcnNvbiIpDQoNCiNEWUFSDQphIDwtIHJhbmtfdGVhbXNfRFlBUiAlPiUgYXJyYW5nZShUZWFtKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19TbmRQY3QgJT4lIGFycmFuZ2UocG9zdGVhbSkNCmIkcmFuaw0KcHJpbnQoIkRZQVIgdnMgMm5kIERvd24gQ252IikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQojU3VjY2VzcyBSYXRlDQphIDwtIHJhbmtfdGVhbXNfc3VjcmF0ZSAlPiUgYXJyYW5nZShUZWFtKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19TbmRQY3QgJT4lIGFycmFuZ2UocG9zdGVhbSkNCmIkcmFuaw0KcHJpbnQoIlN1Y2Nlc3MgUmF0ZSBSdW5uaW5nIEdhbWUgdnMgMm5kIERvd24gQ252IikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQoNCnByaW50KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKQ0KI0NvbXBhcmFyIHN0YXRzIGRvcyBSdW5uaW5nIEJhY2tzIGNvbSBhIHRheGEgZGUgY29udmVyc8OjbyBkZSB0ZXJjZWlyYXMgZGVzY2lkYXMuDQoNCiNFcGEgVGVycmVzdHJlIHBlciBhdHRtcHQNCmEgPC0gcmFua190ZWFtc19FUEFfVF9hdHRlbXB0ICU+JSBhcnJhbmdlKFRpbWUpDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX1RyZFBjdCAlPiUgYXJyYW5nZShwb3N0ZWFtKQ0KYiRyYW5rDQpwcmludCgiRXBhIFRlcnJlc3RyZSBwZXIgYXR0ZW1wdCB2cyAzcmQgRG93biBDbnYiKQ0KY29yKGEkcmFuaywgYiRyYW5rLCBtZXRob2QgPSAicGVhcnNvbiIpDQoNCiNFcGEgVGVycmVzdHJlIExvbmdvIHBlciBhdHRtcHQNCmEgPC0gcmFua190ZWFtc19FUEFfVF9sb25nb19hdHRlbXB0ICU+JSBhcnJhbmdlKFRpbWUpDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX1RyZFBjdCAlPiUgYXJyYW5nZShwb3N0ZWFtKQ0KYiRyYW5rDQpwcmludCgiRXBhIFRlcnJlc3RyZSBMb25nbyBwZXIgYXR0ZW1wdCB2cyAzcmQgRG93biBDbnYiKQ0KY29yKGEkcmFuaywgYiRyYW5rLCBtZXRob2QgPSAicGVhcnNvbiIpDQoNCiNFcGEgQcOpcmVvDQphIDwtIHJhbmtfdGVhbXNfZXBhX2FlcmVvICU+JSBhcnJhbmdlKFRpbWUpDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX1RyZFBjdCAlPiUgYXJyYW5nZShwb3N0ZWFtKQ0KYiRyYW5rDQpwcmludCgiRXBhIEHDqXJlbyB2cyAzcmQgRG93biBDbnYiKQ0KY29yKGEkcmFuaywgYiRyYW5rLCBtZXRob2QgPSAicGVhcnNvbiIpDQoNCiNPRlINCmEgPC0gcmFua190ZWFtc19PRlIgJT4lIGFycmFuZ2UoVGltZSkNCmEkcmFuaw0KDQpiIDwtIHJhbmtfdGltZXNfVHJkUGN0ICU+JSBhcnJhbmdlKHBvc3RlYW0pDQpiJHJhbmsNCnByaW50KCJPRlIgdnMgM3JkIERvd24gQ252IikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQojRXBhIFlhcmRzIEFmdGVyIENhdGNoDQphIDwtIHJhbmtfdGVhbXNfZXBheWFjICU+JSBhcnJhbmdlKFRpbWUpDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX1RyZFBjdCAlPiUgYXJyYW5nZShwb3N0ZWFtKQ0KYiRyYW5rDQpwcmludCgiRVBBIFlhcmRzIEFmdGVyIENhdGNoIHZzIDNyZCBEb3duIENudiIpDQpjb3IoYSRyYW5rLCBiJHJhbmssIG1ldGhvZCA9ICJwZWFyc29uIikNCg0KI1lhcmRzIEJlZm9yZSBDb250YWN0L0F0dGVtcHQNCmEgPC0gcmFua190ZWFtc19ZYXJkc0JlZm9yZUNvbnRhY3QgJT4lIGFycmFuZ2UoVG0pDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX1RyZFBjdCAlPiUgYXJyYW5nZShwb3N0ZWFtKQ0KYiRyYW5rDQpwcmludCgiWWFyZHMgQmVmb3JlIENvbnRhY3QvQXR0ZW1wdCB2cyAzcmQgRG93biBDbnYiKQ0KY29yKGEkcmFuaywgYiRyYW5rLCBtZXRob2QgPSAicGVhcnNvbiIpDQoNCiNZYXJkcyBBZnRlciBDb250YWN0L0F0dGVtcHQNCmEgPC0gcmFua190ZWFtc19ZYXJkc0FmdGVyQ29udGFjdCAlPiUgYXJyYW5nZShUbSkNCmEkcmFuaw0KDQpiIDwtIHJhbmtfdGltZXNfVHJkUGN0ICU+JSBhcnJhbmdlKHBvc3RlYW0pDQpiJHJhbmsNCnByaW50KCJZYXJkcyBBZnRlciBDb250YWN0L0F0dGVtcHQgdnMgM3JkIERvd24gQ252IikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQojQnJva2VuIFRhY2tsZQ0KYSA8LSByYW5rX3RlYW1zX0Jyb2tlblRhY2tsZXMgJT4lIGFycmFuZ2UoVG0pDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX1RyZFBjdCAlPiUgYXJyYW5nZShwb3N0ZWFtKQ0KYiRyYW5rDQpwcmludCgiQnJva2VuIFRhY2tsZXMgdnMgM3JkIERvd24gQ252IikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQojOCtEJQ0KYSA8LSByYW5rX3RlYW1zXzhtYW5ib3ggJT4lIGFycmFuZ2UoVEVBTSkNCmEkcmFuaw0KDQpiIDwtIHJhbmtfdGltZXNfVHJkUGN0ICU+JSBhcnJhbmdlKHBvc3RlYW0pDQpiJHJhbmsNCnByaW50KCI4IG1hbiBpbiB0aGUgYm94IFBlcmNlbnRhZ2UgdnMgM3JkIERvd24gQ252IikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQojVGltZSBCZWhpbmQgTE9TDQphIDwtIHJhbmtfdGVhbXNfVEJMT1MgJT4lIGFycmFuZ2UoVEVBTSkNCmEkcmFuaw0KDQpiIDwtIHJhbmtfdGltZXNfVHJkUGN0ICU+JSBhcnJhbmdlKHBvc3RlYW0pDQpiJHJhbmsNCnByaW50KCJUaW1lIEJlaGluZCBMaW5lIE9mIFNjcmltYWdlIHZzIDNyZCBEb3duIENudiIpDQpjb3IoYSRyYW5rLCBiJHJhbmssIG1ldGhvZCA9ICJwZWFyc29uIikNCg0KI0RWT0ENCmEgPC0gcmFua190ZWFtc19EVk9BICU+JSBhcnJhbmdlKFRlYW0pDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX1RyZFBjdCAlPiUgYXJyYW5nZShwb3N0ZWFtKQ0KYiRyYW5rDQpwcmludCgiRFZPQSB2cyAzcmQgRG93biBDbnYiKQ0KY29yKGEkcmFuaywgYiRyYW5rLCBtZXRob2QgPSAicGVhcnNvbiIpDQoNCiNEWUFSDQphIDwtIHJhbmtfdGVhbXNfRFlBUiAlPiUgYXJyYW5nZShUZWFtKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19UcmRQY3QgJT4lIGFycmFuZ2UocG9zdGVhbSkNCmIkcmFuaw0KcHJpbnQoIkRZQVIgdnMgM3JkIERvd24gQ252IikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQojU3VjY2VzcyBSYXRlDQphIDwtIHJhbmtfdGVhbXNfc3VjcmF0ZSAlPiUgYXJyYW5nZShUZWFtKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19UcmRQY3QgJT4lIGFycmFuZ2UocG9zdGVhbSkNCmIkcmFuaw0KcHJpbnQoIlN1Y2Nlc3MgUmF0ZSBSdW5uaW5nIEdhbWUgdnMgM3JkIERvd24gQ252IikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQoNCnByaW50KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKQ0KI0NvbXBhcmFyIHN0YXRzIGRvcyBSdW5uaW5nIEJhY2tzIGNvbSBhIHRheGEgZGUgY29udmVyc8OjbyBkZSBxdWFydGFzIGRlc2NpZGFzLg0KDQojRXBhIFRlcnJlc3RyZSBwZXIgYXR0bXB0DQphIDwtIHJhbmtfdGVhbXNfRVBBX1RfYXR0ZW1wdCAlPiUgYXJyYW5nZShUaW1lKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19GdGhQY3QgJT4lIGFycmFuZ2UocG9zdGVhbSkNCmIkcmFuaw0KcHJpbnQoIkVwYSBUZXJyZXN0cmUgcGVyIGF0dGVtcHQgdnMgNHRoIERvd24gQ252IikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQojRXBhIFRlcnJlc3RyZSBMb25nbyBwZXIgYXR0bXB0DQphIDwtIHJhbmtfdGVhbXNfRVBBX1RfbG9uZ29fYXR0ZW1wdCAlPiUgYXJyYW5nZShUaW1lKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19GdGhQY3QgJT4lIGFycmFuZ2UocG9zdGVhbSkNCmIkcmFuaw0KcHJpbnQoIkVwYSBUZXJyZXN0cmUgTG9uZ28gcGVyIGF0dGVtcHQgdnMgNHRoIERvd24gQ252IikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQojRXBhIEHDqXJlbw0KYSA8LSByYW5rX3RlYW1zX2VwYV9hZXJlbyAlPiUgYXJyYW5nZShUaW1lKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19GdGhQY3QgJT4lIGFycmFuZ2UocG9zdGVhbSkNCmIkcmFuaw0KcHJpbnQoIkVwYSBBw6lyZW8gdnMgNHRoIERvd24gQ252IikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQojT0ZSDQphIDwtIHJhbmtfdGVhbXNfT0ZSICU+JSBhcnJhbmdlKFRpbWUpDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX0Z0aFBjdCAlPiUgYXJyYW5nZShwb3N0ZWFtKQ0KYiRyYW5rDQpwcmludCgiT0ZSIHZzIDR0aCBEb3duIENudiIpDQpjb3IoYSRyYW5rLCBiJHJhbmssIG1ldGhvZCA9ICJwZWFyc29uIikNCg0KI0VwYSBZYXJkcyBBZnRlciBDYXRjaA0KYSA8LSByYW5rX3RlYW1zX2VwYXlhYyAlPiUgYXJyYW5nZShUaW1lKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19GdGhQY3QgJT4lIGFycmFuZ2UocG9zdGVhbSkNCmIkcmFuaw0KcHJpbnQoIkVQQSBZYXJkcyBBZnRlciBDYXRjaCB2cyA0dGggRG93biBDbnYiKQ0KY29yKGEkcmFuaywgYiRyYW5rLCBtZXRob2QgPSAicGVhcnNvbiIpDQoNCiNZYXJkcyBCZWZvcmUgQ29udGFjdC9BdHRlbXB0DQphIDwtIHJhbmtfdGVhbXNfWWFyZHNCZWZvcmVDb250YWN0ICU+JSBhcnJhbmdlKFRtKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19GdGhQY3QgJT4lIGFycmFuZ2UocG9zdGVhbSkNCmIkcmFuaw0KcHJpbnQoIllhcmRzIEJlZm9yZSBDb250YWN0L0F0dGVtcHQgdnMgNHRoIERvd24gQ252IikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQojWWFyZHMgQWZ0ZXIgQ29udGFjdC9BdHRlbXB0DQphIDwtIHJhbmtfdGVhbXNfWWFyZHNBZnRlckNvbnRhY3QgJT4lIGFycmFuZ2UoVG0pDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX0Z0aFBjdCAlPiUgYXJyYW5nZShwb3N0ZWFtKQ0KYiRyYW5rDQpwcmludCgiWWFyZHMgQWZ0ZXIgQ29udGFjdC9BdHRlbXB0IHZzIDR0aCBEb3duIENudiIpDQpjb3IoYSRyYW5rLCBiJHJhbmssIG1ldGhvZCA9ICJwZWFyc29uIikNCg0KI0Jyb2tlbiBUYWNrbGUNCmEgPC0gcmFua190ZWFtc19Ccm9rZW5UYWNrbGVzICU+JSBhcnJhbmdlKFRtKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19GdGhQY3QgJT4lIGFycmFuZ2UocG9zdGVhbSkNCmIkcmFuaw0KcHJpbnQoIkJyb2tlbiBUYWNrbGVzIHZzIDR0aCBEb3duIENudiIpDQpjb3IoYSRyYW5rLCBiJHJhbmssIG1ldGhvZCA9ICJwZWFyc29uIikNCg0KIzgrRCUNCmEgPC0gcmFua190ZWFtc184bWFuYm94ICU+JSBhcnJhbmdlKFRFQU0pDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX0Z0aFBjdCAlPiUgYXJyYW5nZShwb3N0ZWFtKQ0KYiRyYW5rDQpwcmludCgiOCBtYW4gaW4gdGhlIGJveCBQZXJjZW50YWdlIHZzIDR0aCBEb3duIENudiIpDQpjb3IoYSRyYW5rLCBiJHJhbmssIG1ldGhvZCA9ICJwZWFyc29uIikNCg0KI1RpbWUgQmVoaW5kIExPUw0KYSA8LSByYW5rX3RlYW1zX1RCTE9TICU+JSBhcnJhbmdlKFRFQU0pDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX0Z0aFBjdCAlPiUgYXJyYW5nZShwb3N0ZWFtKQ0KYiRyYW5rDQpwcmludCgiVGltZSBCZWhpbmQgTGluZSBPZiBTY3JpbWFnZSB2cyA0dGggRG93biBDbnYiKQ0KY29yKGEkcmFuaywgYiRyYW5rLCBtZXRob2QgPSAicGVhcnNvbiIpDQoNCiNEVk9BDQphIDwtIHJhbmtfdGVhbXNfRFZPQSAlPiUgYXJyYW5nZShUZWFtKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19GdGhQY3QgJT4lIGFycmFuZ2UocG9zdGVhbSkNCmIkcmFuaw0KcHJpbnQoIkRWT0EgdnMgNHRoIERvd24gQ252IikNCmNvcihhJHJhbmssIGIkcmFuaywgbWV0aG9kID0gInBlYXJzb24iKQ0KDQojRFlBUg0KYSA8LSByYW5rX3RlYW1zX0RZQVIgJT4lIGFycmFuZ2UoVGVhbSkNCmEkcmFuaw0KDQpiIDwtIHJhbmtfdGltZXNfRnRoUGN0ICU+JSBhcnJhbmdlKHBvc3RlYW0pDQpiJHJhbmsNCnByaW50KCJEWUFSIHZzIDR0aCBEb3duIENudiIpDQpjb3IoYSRyYW5rLCBiJHJhbmssIG1ldGhvZCA9ICJwZWFyc29uIikNCg0KI1N1Y2Nlc3MgUmF0ZQ0KYSA8LSByYW5rX3RlYW1zX3N1Y3JhdGUgJT4lIGFycmFuZ2UoVGVhbSkNCmEkcmFuaw0KDQpiIDwtIHJhbmtfdGltZXNfRnRoUGN0ICU+JSBhcnJhbmdlKHBvc3RlYW0pDQpiJHJhbmsNCnByaW50KCJTdWNjZXNzIFJhdGUgUnVubmluZyBHYW1lIHZzIDR0aCBEb3duIENudiIpDQpjb3IoYSRyYW5rLCBiJHJhbmssIG1ldGhvZCA9ICJwZWFyc29uIikNCg0KcHJpbnQoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpDQojQ29tcGFyYXIgc3RhdHMgZG9zIFJ1bm5pbmcgQmFja3MgY29tIG8gT2ZmZW5zaXZlIERWT0EgZG8gRm9vdGJhbGwgT3V0c2lkZXJzLg0KDQpyYW5rX3RpbWVzX09mZmVuc2l2ZURWT0EgPC0gYygxMywgMTUsIDEsIDIxLCAyNywgMjUsIDI5LCAyMCwgMiwgMjYsIDE4LCA4LCAxNywgMTksIDI0LCAzLCAxMiwgMTYsIDEwLCAxMSwgNCwgMjIsIDMyLCA5LCAxNCwgMzEsIDUsIDcsIDIzLCA2LCAzMCkNCg0KI0VwYSBUZXJyZXN0cmUgcGVyIGF0dG1wdA0KYSA8LSByYW5rX3RlYW1zX0VQQV9UX2F0dGVtcHQgJT4lIGFycmFuZ2UoVGltZSkNCmEkcmFuaw0KDQpiIDwtIHJhbmtfdGltZXNfT2ZmZW5zaXZlRFZPQSANCg0KcHJpbnQoIkVwYSBUZXJyZXN0cmUgcGVyIGF0dGVtcHQgdnMgT2ZmZW5zaXZlIERWT0EiKQ0KY29yKGEkcmFuaywgYiwgbWV0aG9kID0gInBlYXJzb24iKQ0KDQojRXBhIFRlcnJlc3RyZSBMb25nbyBwZXIgYXR0bXB0DQphIDwtIHJhbmtfdGVhbXNfRVBBX1RfbG9uZ29fYXR0ZW1wdCAlPiUgYXJyYW5nZShUaW1lKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19PZmZlbnNpdmVEVk9BDQpiDQpwcmludCgiRXBhIFRlcnJlc3RyZSBMb25nbyBwZXIgYXR0ZW1wdCB2cyBPZmZlbnNpdmUgRFZPQSIpDQpjb3IoYSRyYW5rLCBiLCBtZXRob2QgPSAicGVhcnNvbiIpDQoNCiNFcGEgQcOpcmVvDQphIDwtIHJhbmtfdGVhbXNfZXBhX2FlcmVvICU+JSBhcnJhbmdlKFRpbWUpDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX09mZmVuc2l2ZURWT0ENCmINCnByaW50KCJFcGEgQcOpcmVvIHZzIE9mZmVuc2l2ZSBEVk9BIikNCmNvcihhJHJhbmssIGIsIG1ldGhvZCA9ICJwZWFyc29uIikNCg0KI09GUg0KYSA8LSByYW5rX3RlYW1zX09GUiAlPiUgYXJyYW5nZShUaW1lKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19PZmZlbnNpdmVEVk9BDQpiDQpwcmludCgiT0ZSIHZzIE9mZmVuc2l2ZSBEVk9BIikNCmNvcihhJHJhbmssIGIsIG1ldGhvZCA9ICJwZWFyc29uIikNCg0KI0VwYSBZYXJkcyBBZnRlciBDYXRjaA0KYSA8LSByYW5rX3RlYW1zX2VwYXlhYyAlPiUgYXJyYW5nZShUaW1lKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19PZmZlbnNpdmVEVk9BDQpiDQpwcmludCgiRVBBIFlhcmRzIEFmdGVyIENhdGNoIHZzIE9mZmVuc2l2ZSBEVk9BIikNCmNvcihhJHJhbmssIGIsIG1ldGhvZCA9ICJwZWFyc29uIikNCg0KI1lhcmRzIEJlZm9yZSBDb250YWN0L0F0dGVtcHQNCmEgPC0gcmFua190ZWFtc19ZYXJkc0JlZm9yZUNvbnRhY3QgJT4lIGFycmFuZ2UoVG0pDQphJHJhbmsNCg0KYiA8LSByYW5rX3RpbWVzX09mZmVuc2l2ZURWT0ENCmINCnByaW50KCJZYXJkcyBCZWZvcmUgQ29udGFjdC9BdHRlbXB0IHZzIE9mZmVuc2l2ZSBEVk9BIikNCmNvcihhJHJhbmssIGIsIG1ldGhvZCA9ICJwZWFyc29uIikNCg0KI1lhcmRzIEFmdGVyIENvbnRhY3QvQXR0ZW1wdA0KYSA8LSByYW5rX3RlYW1zX1lhcmRzQWZ0ZXJDb250YWN0ICU+JSBhcnJhbmdlKFRtKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19PZmZlbnNpdmVEVk9BDQpiDQpwcmludCgiWWFyZHMgQWZ0ZXIgQ29udGFjdC9BdHRlbXB0IHZzIE9mZmVuc2l2ZSBEVk9BIikNCmNvcihhJHJhbmssIGIsIG1ldGhvZCA9ICJwZWFyc29uIikNCg0KI0Jyb2tlbiBUYWNrbGUNCmEgPC0gcmFua190ZWFtc19Ccm9rZW5UYWNrbGVzICU+JSBhcnJhbmdlKFRtKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19PZmZlbnNpdmVEVk9BDQpiDQpwcmludCgiQnJva2VuIFRhY2tsZXMgdnMgT2ZmZW5zaXZlIERWT0EiKQ0KY29yKGEkcmFuaywgYiwgbWV0aG9kID0gInBlYXJzb24iKQ0KDQojOCtEJQ0KYSA8LSByYW5rX3RlYW1zXzhtYW5ib3ggJT4lIGFycmFuZ2UoVEVBTSkNCmEkcmFuaw0KDQpiIDwtIHJhbmtfdGltZXNfT2ZmZW5zaXZlRFZPQQ0KYg0KcHJpbnQoIjggbWFuIGluIHRoZSBib3ggUGVyY2VudGFnZSB2cyBPZmZlbnNpdmUgRFZPQSIpDQpjb3IoYSRyYW5rLCBiLCBtZXRob2QgPSAicGVhcnNvbiIpDQoNCiNUaW1lIEJlaGluZCBMT1MNCmEgPC0gcmFua190ZWFtc19UQkxPUyAlPiUgYXJyYW5nZShURUFNKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19PZmZlbnNpdmVEVk9BDQpiDQpwcmludCgiVGltZSBCZWhpbmQgTGluZSBPZiBTY3JpbWFnZSB2cyBPZmZlbnNpdmUgRFZPQSIpDQpjb3IoYSRyYW5rLCBiLCBtZXRob2QgPSAicGVhcnNvbiIpDQoNCiNEVk9BDQphIDwtIHJhbmtfdGVhbXNfRFZPQSAlPiUgYXJyYW5nZShUZWFtKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19PZmZlbnNpdmVEVk9BDQpiDQpwcmludCgiRFZPQSB2cyBPZmZlbnNpdmUgRFZPQSIpDQpjb3IoYSRyYW5rLCBiLCBtZXRob2QgPSAicGVhcnNvbiIpDQoNCiNEWUFSDQphIDwtIHJhbmtfdGVhbXNfRFlBUiAlPiUgYXJyYW5nZShUZWFtKQ0KYSRyYW5rDQoNCmIgPC0gcmFua190aW1lc19PZmZlbnNpdmVEVk9BDQpiDQpwcmludCgiRFlBUiB2cyBPZmZlbnNpdmUgRFZPQSIpDQpjb3IoYSRyYW5rLCBiLCBtZXRob2QgPSAicGVhcnNvbiIpDQoNCiNTdWNjZXNzIFJhdGUNCmEgPC0gcmFua190ZWFtc19zdWNyYXRlICU+JSBhcnJhbmdlKFRlYW0pDQoNCg0KYiA8LSByYW5rX3RpbWVzX09mZmVuc2l2ZURWT0ENCmINCnByaW50KCJTdWNjZXNzIFJhdGUgUnVubmluZyBHYW1lIHZzIE9mZmVuc2l2ZSBEVk9BIikNCmNvcihhJHJhbmssIGIsIG1ldGhvZCA9ICJwZWFyc29uIikNCg0KYGBgDQpgYGB7cn0NCg0KYGBgDQoNCg==